資源描述:
《linux0.01內(nèi)核源代碼及注釋》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、Bootsect.s(1-9)!!SYS_SIZEisthenumberofclicks(16bytes)tobeloaded.!0x3000is0x30000bytes=196kB,morethanenoughforcurrent!versionsoflinux!SYS_SIZE是要加載的節(jié)數(shù)(16字節(jié)為1節(jié))。0x3000共為1234560x7c000x00000x900000x100000xA0000system模塊代碼執(zhí)行位置線路0x90200!0x30000字節(jié)=192kB(上面Linus估算錯(cuò)了),對(duì)于當(dāng)前的版本空間已足夠了。!S
2、YSSIZE=0x3000!指編譯連接后system模塊的大小。參見(jiàn)列表1.2中第92的說(shuō)明。!這里給出了一個(gè)最大默認(rèn)值。!!bootsect.s(C)1991LinusTorvalds!!bootsect.sisloadedat0x7c00bythebios-startuproutines,andmoves!iselfoutofthewaytoaddress0x90000,andjumpsthere.!!Itthenloads'setup'directlyafteritself(0x90200),andthesystem!at0x10000
3、,usingBIOSinterrupts.!!NOTE!currentlysystemisatmost8*65536byteslong.Thisshouldbeno!problem,eveninthefuture.Iwanttokeepitsimple.This512kB!kernelsizeshouldbeenough,especiallyasthisdoesn'tcontainthe!buffercacheasinminix!!Theloaderhasbeenmadeassimpleaspossible,andcontinuos!read
4、errorswillresultinaunbreakableloop.Rebootbyhand.It!loadsprettyfastbygettingwholesectorsatatimewheneverpossible.!!以下是前面這些文字的翻譯:!bootsect.s(C)1991LinusTorvalds版權(quán)所有!!bootsect.s被bios-啟動(dòng)子程序加載至0x7c00(31k)處,并將自己!移到了地址0x90000(576k)處,并跳轉(zhuǎn)至那里。!472!它然后使用BIOS中斷將'setup'直接加載到自己的后面(0x90200
5、)(576.5k),!并將system加載到地址0x10000處。!!注意!目前的內(nèi)核系統(tǒng)最大長(zhǎng)度限制為(8*65536)(512k)字節(jié),即使是在!將來(lái)這也應(yīng)該沒(méi)有問(wèn)題的。我想讓它保持簡(jiǎn)單明了。這樣512k的最大內(nèi)核長(zhǎng)度應(yīng)該!足夠了,尤其是這里沒(méi)有象minix中一樣包含緩沖區(qū)高速緩沖。!!加載程序已經(jīng)做的夠簡(jiǎn)單了,所以持續(xù)的讀出錯(cuò)將導(dǎo)致死循環(huán)。只能手工重啟。!只要可能,通過(guò)一次取取所有的扇區(qū),加載過(guò)程可以做的很快的。.globlbegtext,begdata,begbss,endtext,enddata,endbss!定義了6個(gè)全局標(biāo)識(shí)符;
6、.text!文本段;begtext:.data!數(shù)據(jù)段;begdata:.bss!堆棧段;begbss:.text!文本段;SETUPLEN=4!nrofsetup-sectors!setup程序的扇區(qū)數(shù)(setup-sectors)值;BOOTSEG=0x07c0!originaladdressofboot-sector!bootsect的原始地址(是段地址,以下同);INITSEG=0x9000!wemoveboothere-outoftheway!將bootsect移到這里--避開;SETUPSEG=0x9020!setupstarts
7、here!setup程序從這里開始;SYSSEG=0x1000!systemloadedat0x10000(65536).!system模塊加載到0x10000(64kB)處;ENDSEG=SYSSEG+SYSSIZE!wheretostoploading!停止加載的段地址;!ROOT_DEV:0x000-sametypeoffloppyasboot.!根文件系統(tǒng)設(shè)備使用與引導(dǎo)時(shí)同樣的軟驅(qū)設(shè)備;!0x301-firstpartitiononfirstdriveetc!根文件系統(tǒng)設(shè)備在第一個(gè)硬盤的第一個(gè)分區(qū)上,等等;ROOT_DEV=0x306
8、!指定根文件系統(tǒng)設(shè)備是第2個(gè)硬盤的第1個(gè)分區(qū)。這是Linux老式的硬盤命名!方式,具體值的含義如下:!設(shè)備號(hào)=主設(shè)備號(hào)*256+次設(shè)備號(hào)(也即dev_no=(maj