BIOS時期
通過指向ROM的指令,執行ROM中的初始化工作代碼,BIOS進行初始化工作;
首先檢查硬件配置,然後建立中斷向量表和中斷服務程序。
Bootloader 時期
Grud2 : Grand Unified Bootloader Version2
通過 grub2-mkconfig -o /boot/grub2/grub.cfg 來配置系統啓動的選項
使用 grub2-install /dev/sda,可以將啓動程序安裝到相應的位置
grub2首先要安裝的是boot.img ;
BIOS 完成任務後,會將 boot.img 從硬盤加載到內存中的 0x7c00 來運行
boot.img 先加載的是 core.img 的第一個扇區。如果從硬盤啓動的話,這個扇區裏面是 diskboot.img,對應的代碼是 diskboot.S;
diskboot.img 的任務就是將 core.img 的其他部分加載進來,先是解壓縮程序 lzma_decompress.img,再往下是 kernel.img,最後是各個模塊 module 對應的映像。
lzma_decompress.img 做了一個重要的決定,就是調用 real_to_prot,切換到保護模式,這樣就能在更大的尋址空間裏面,加載更多的東西。
切換保護模式的函數 DATA32 call real_to_prot 會打開 Gate A20,也就是第 21 根地址線的控制線
然後對壓縮過的 kernel.img 進行解壓縮,跳轉到 kernel.img 開始運行。
grub_load_config() 開始解析grub.conf中的配置信息;
如果正常啓動grub_command_execute("normal",0,0),會調用grub_normal_execute()函數,在這個函數裏grub_show_menu()會顯示操作系統列表。