資源描述:
《轉(zhuǎn)linux引導(dǎo)加載學(xué)習(xí)筆記》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、轉(zhuǎn)Linux引導(dǎo)加載學(xué)習(xí)筆記本文以是我的學(xué)習(xí)記錄,其中一些文字和圖片來自參考資料所列文檔,感謝作者對其知識和分享!最近在自學(xué)Linuxkernel方面的東西,這兩天了粗淺的研究了下kernelboot過程,在此記錄。這里所指Linux引導(dǎo)加載未涉及虛擬化環(huán)境,即系統(tǒng)未運行在hypervisor之上。Linux通過執(zhí)行不同階段的引導(dǎo)加載程序(bootloader)程序來引導(dǎo)操作系統(tǒng),在完成內(nèi)核等引導(dǎo)之后,最終會由調(diào)度器接管CPU,其通過啟用中斷來周期性的搶占控制權(quán),處理多個用戶進程/客戶進程(kvm虛擬化)。Toplevel的引導(dǎo)過程如下圖。整個Linux系統(tǒng)引導(dǎo)共分5步執(zhí)行操作
2、:BIOS/BootMonitor引導(dǎo)程序;BIOS包括POST和Runtime服務(wù)。被稱為第一階段的MBR(Masterbootrecord)引導(dǎo)程序;位于BIOS配置的啟動磁盤0柱面1扇區(qū)的主引導(dǎo)記錄,用于啟動第二階段的linuxbootloader。被稱為第二階段的linuxbootloader;主要有LILO(Linuxloader)和GNUGRUB(Grandunifiedbootloader)兩種bootloader程序,現(xiàn)主流為GRUB。包括了通過initrd來創(chuàng)建RAM盤,執(zhí)行init腳本,通過LKM(linuxkernelmodule)加載本地磁盤等驅(qū)動程序來
3、掛載磁盤中的root文件系統(tǒng)。RAM盤中是個完整的小型linux環(huán)境,在沒有磁盤的嵌入式環(huán)境中,initrd可以是最終的根文件系統(tǒng),也可以通過NFS來掛載最終的文件系統(tǒng)。linuxkernel(及initrd函數(shù))引導(dǎo);負責(zé)加載并解壓zImage/bzImagekernel及initrd映像,并開始執(zhí)行kernel初使化和引導(dǎo)程序/過程。init進程。用于啟動linux配置的各項用戶空間服務(wù)(demon)進程。加電后首先被執(zhí)行的是BIOS(Baseinput/outputsystem)程序。嵌入式環(huán)境使用bootmonitor,它負責(zé)在一個位于rom/flash中預(yù)定地址開始執(zhí)
4、行引導(dǎo)程序,而在PC環(huán)境中這個啟動地址是0xFFFF0,相對來講BIOS提供了更多的配置功能。它主要由兩部分組成:POST(PowerOnSelfTest)程序;其負責(zé)接通電源時對硬件檢測,包括創(chuàng)建中斷向量、設(shè)置寄存器、對一些外部設(shè)備進行初始化和檢測等。BIOSRuntime服務(wù);負責(zé)為操作系統(tǒng)提供一些基礎(chǔ)服務(wù),主要與IO外設(shè)有關(guān)。當BIOSPOST執(zhí)行完后,其將會從內(nèi)存中清理,而Runtime服務(wù)會常駐內(nèi)存,為操作系統(tǒng)提供一些底層的支持。最后BIOS將控制權(quán)交給稱為第一階段引導(dǎo)程序的MBR(Masterbootrecord)程序。接下來執(zhí)行的MBR是一個512byte固定大小
5、的映像。包括446byte長的被稱為初始程序加裁程序(Initialprogramloader,IPL)的可執(zhí)行代碼和64byte分區(qū)表(16byte*4個),最后以0xaa55特殊字節(jié)結(jié)束。如下圖所示。MBR引導(dǎo)程序會將掃描分區(qū)表,獲得唯一活動分區(qū)后,將其中的引導(dǎo)程序讀入RAM并開始執(zhí)行。MBR啟動的引導(dǎo)程序被稱為第二階段引導(dǎo)程序,它是引導(dǎo)的主體,是引導(dǎo)加載的真正部分。Linux中該階段有兩個流行的程序,LILO(較老)和GRUB。如果安裝了lilo程序,可以通過root用戶執(zhí)行如下命令來通過lilo生成默認配置的MBR,并寫入到啟動磁盤0柱面1扇區(qū)位置上。Shell代碼#/
6、sbin/lilo-v-v#/sbin/lilo-v-v一般需要修改lilo的配置文件,使生成的MBR有效。位于/etc/lilo.conf。lilo配置示例。Config代碼boot=/dev/hdamap=/boot/mapinstall=/boot/boot.bprompttimeout=100compactdefault=Linuximage=/boot/vmlinuz-2.4.18-14label=Linuxroot=/dev/hdb3read-onlypassword=linuxother=/dev/hdalabel=WindowsXPboot=/dev/hdama
7、p=/boot/mapinstall=/boot/boot.bprompttimeout=100compactdefault=Linuximage=/boot/vmlinuz-2.4.18-14label=Linuxroot=/dev/hdb3read-onlypassword=linuxother=/dev/hdalabel=WindowsXPboot鍵指定了lilo在哪里安裝MBR??梢酝ㄟ^替換boot=/dev/fd0配置來指定lilo創(chuàng)建有引導(dǎo)記錄的軟盤。LILO天生存在一些缺點和不