資源描述:
《Linux系統(tǒng)的引導(dǎo)過程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、6.2Linux系統(tǒng)的引導(dǎo)過程Linux系統(tǒng)的引導(dǎo)和初始化過程可以分為兩個階段,如圖6.3所示圖6.3Linux內(nèi)核啟動過程示意圖第1階段:完成硬件檢測、初始化和內(nèi)核的引導(dǎo)。第2階段:主要是init初始化進程的執(zhí)行。1.BIOS自檢計算機通電后,首先由BIOS進行自檢,即所謂的POST(PowerOnSelfTest),對硬件進行檢測,然后BIOS必須確定要使用哪個設(shè)備來引導(dǎo)系統(tǒng),此時會根據(jù)CMOS中設(shè)置的引導(dǎo)順序,搜索處于活動狀態(tài)并可引導(dǎo)的設(shè)備(硬盤、CDROM、USB設(shè)備或軟盤),當(dāng)找到一個引導(dǎo)設(shè)備之后,從中讀出引導(dǎo)塊或MBR(MBR,Mast
2、erBootRecord)。主引導(dǎo)記錄MBR中包含主引導(dǎo)加載程序。MBR是一個512B大小的扇區(qū),位于磁盤的第一個扇區(qū)中(0道0面1扇區(qū))。當(dāng)MBR被加載到RAM中之后,BIOS會把控制權(quán)交給MBR。注意,要看MBR的內(nèi)容,可以執(zhí)行如下命令:#ddif=/dev/hdaof=mbr.binbs=512count=1//從/dev/hda上讀取前512B的內(nèi)容,將其寫入mbr.bin文件中#od-xambr.bin//以十六進制和ASCII碼格式打印這個二進制文件的內(nèi)容MBR中的主引導(dǎo)加載程序是一個512B大小的映像,其中包含程序代碼和一個分區(qū)表。前
3、446B是主引導(dǎo)加載程序,其中包含可執(zhí)行代碼和錯誤消息文本。接下來的64B是分區(qū)表,其中包含4個分區(qū)的記錄(每個記錄的大小是16個字節(jié))。MBR以兩個特殊數(shù)字的字節(jié)(0xAA55)結(jié)束。這個數(shù)字會用來進行MBR的有效性檢查。2.啟動GRUBGRUB是引導(dǎo)加載程序,會引導(dǎo)操作系統(tǒng)。當(dāng)機器引導(dǎo)它的操作系統(tǒng)時,BIOS會讀取引導(dǎo)介質(zhì)上最前面的512字節(jié)(MBR,MasterBootRecord)主引導(dǎo)加載程序(第一階段的引導(dǎo)加載程序)的主要作用是查找并加載次引導(dǎo)加載程序,它是通過在分區(qū)表中查找一個活動分區(qū)來實現(xiàn)這種功能的。當(dāng)找到一個活動分區(qū)時,會掃描分區(qū)
4、表中的其它分區(qū),以確保它們都不是活動的。當(dāng)這個過程驗證完成之后,就將活動分區(qū)的引導(dǎo)記錄(第二階段的引導(dǎo)加載程序)從這個設(shè)備中讀到RAM中,并執(zhí)行它。第二階段的引導(dǎo)加載程序(次引導(dǎo)加載程序)可以更形象地稱為內(nèi)核加載程序。主要作用是將默認(rèn)的內(nèi)核映像和initrd映像加載到內(nèi)存中。在PC環(huán)境中,第一階段和第二階段的引導(dǎo)加載程序一起稱為GRandUnifiedBootloader(GRUB)。在GRUB命令行環(huán)境中(啟動電腦后,在GRUB界面中按C鍵進入),可以使用initrd映像引導(dǎo)一個特定的內(nèi)核,方法如下:grub>kernel(hd0,2)/Poss
5、iblefilesare:lost+foundsysprocvartmpdevetcrootselinuxusrbinboothomelibmediamntoptsbinsrvmisctftpboot.autofscknetcache_dbgrub>kernel(hd0,2)/boot/vmlinuz-2.6.18-128.el5[Linux-bzImage,setup=0x1e00,size=0x1bbeb4]grub>initrd(hd0,2)/boot/initrd-2.6.18-128.el5.img[Linux-initrd@0x2fd7
6、9000,0x266c72bytes]grub>當(dāng)內(nèi)核映像被加載到內(nèi)存后,內(nèi)核階段就加開始了。3.加載內(nèi)核當(dāng)內(nèi)核映像被加載到內(nèi)存中,并且階段2的引導(dǎo)加載程序釋放控制權(quán)之后,內(nèi)核階段就開始了。內(nèi)核映像并不是一個可執(zhí)行的內(nèi)核,而是一個壓縮過的內(nèi)核映像。通常它是一個zImage(壓縮映像,小于512KB)或一個bzImage(較大的壓縮映像,大于512KB)。在這個內(nèi)核映像前面是一個例程,它實現(xiàn)少量硬件設(shè)置,并對內(nèi)核映像中包含的內(nèi)核進行解壓,然后將其放入高端內(nèi)存中,如果有初始RAM磁盤映像,就會將它移動到內(nèi)存中,并標(biāo)明以后使用。然后該例程會調(diào)用內(nèi)核,并開
7、始啟動內(nèi)核引導(dǎo)的過程。在內(nèi)核引導(dǎo)過程中,初始RAM磁盤(initrd)是由次引導(dǎo)加載程序加載到內(nèi)存中的,它會被復(fù)制到RAM中并掛載到系統(tǒng)上。這個initrd會作為RAM中的臨時根文件系統(tǒng)使用,并允許內(nèi)核在沒有掛載任何物理磁盤的情況下完整地實現(xiàn)引導(dǎo)。由于與外圍設(shè)備進行交互所需要的模塊可能是initrd的一部分,因此內(nèi)核可以非常小,但是仍然需要支持大量可能的硬件配置。在內(nèi)核引導(dǎo)之后,就可以正式掛載根文件系統(tǒng)了,此時會將initrd根文件系統(tǒng)卸載掉,掛載真正的根文件系統(tǒng)。注意:在一個沒有硬盤的嵌入式環(huán)境中,initrd可以是最終的根文件系統(tǒng),或者通過網(wǎng)絡(luò)
8、文件系統(tǒng)(NFS)掛載最終的根文件系統(tǒng)。4.執(zhí)行init進程內(nèi)核被載入內(nèi)存,開始運行并初始化所有的設(shè)備驅(qū)動程序和數(shù)據(jù)結(jié)構(gòu)等