總體上來講:
BIOS->MBR->GRUB(LILO)->內核->用戶空間
1. 系統上電時,cpu會將pc指針賦值為一個特定的地址0xffff0, 並且執行該地址處的指令。在pc中,該地址位於BIOS中。
2. BIOS按照CMOS中設定的啟動順序來搜索處於活動狀態的,可以引導的設備。如果是硬盤,則讀取MBR(512)個字節到RAM中,並將控制權交給這段程序。
3. 主引導加載程序查找並加載次引導加載程序。它在分區表中查找活動分區,當找到一個活動分區時,掃描其他分區,以確保它們不是活動的。當這個過程完成之後,將這個活動分區的引導記錄讀入RAM並執行它。
4. 次引導加載程序加載Linux內核和可選的初始RAMdisk, 並將控制權交給Linux內核。
5. 運行被加載的內核,並啟動用戶空間應用程序。
內核啟動到用戶空間的流程如下:
start() : /arch/i386/boot/head.S 基本的硬件設置
startup_32(): /arch/i386/boot/compress/head.S 初始化頁表,啟動內層分頁機制。
decompress_kernel(): /arch/i386/boot/compress/misc.c
startup_32();
start_kernel(): /init/main.c 初始化中斷,進一步設置內存
cpu_idle(): /init/main.c