第一步:電腦加電後cpu開始自身初始化,然後從某個固定位置(一般為0xfffffff0)取指令開始執行,此指令為跳轉指令,跳轉到bios** 首部。
第二步:bios開始加電自檢進行post(power on self test),此階段完成系統硬體檢測,包括記憶體、系統匯流排檢測等,然後bios讀取啟動裝置第乙個扇區(最開始的512位元組資訊),該扇區即為 mbr(master boot record),mbr中儲存了核心引導程式的開始部分。
核心引導程式分為兩部分,主引導程式和活動分割槽引導記錄中的次引導程式。
mbr :
程式** 446位元組;
分割槽表 64位元組;
檢驗位 2位元組; 檢驗mbr是否有效
第三步:主引導程式掃瞄分割槽表,尋找活動分割槽,將位於活動分割槽引導記錄中的次引導程式載入到記憶體並執行。
第四步:次引導程式負責載入核心映像,並將控制權交給核心。pc核心引導程式常用的有lilo(linux loader)和grub(grand unified boot loader),嵌入式中常用的引導程式有u-boot和redboot。
第五步:核心在獲取控制權後開始工作。核心映像以壓縮檔案形式儲存,並可以直接執行,因此核心最開始的工作就是解壓自己。核心編譯後生成的是 vmlinux,然後壓縮成zimage(小核心,小於512kb)或bzimage(大核心,大於512kb),在二者頭部都內嵌解壓**。
例i386映像得bzimage的呼叫:
start() arch/i386/boot/head.s
startup_32() arch/i386/boot/compressed/head.s
decompress_kernel() arch/i386/boot/head.s
startup_32() arch/i386/kernel/head.s
start_kernel() init/main.c
1首先執行arch/i386/boot/head.s的start彙編例程,進行硬體設定,
2然後呼叫startup_32()設定基本的執行環境 (堆疊等),並清除bss(block started by symbol),
3然後呼叫decompress_kernel將核心解壓到記憶體中,
4然後呼叫另乙個startup_32函式對頁表進行初始化,啟用記憶體分 頁功能,
5並為任何可選的浮點單元(fpu)檢測cpu型別將其儲存起來以後使用,
6然後呼叫init/main.c進入核心初始化。
總結一下就是cpu載入bios,bios載入核心引導程式,核心引導程式解壓核心映像並載入。
Linux核心啟動過程
linux核心啟動過程 第一篇日誌就摘錄一下linux核心的啟動過程,參考了 linux核心移植和yaffs2根檔案系統製作 嵌入式linux系統從軟體角度看可以分為四部分 引導引導程式 bootloader linux核心,檔案系統,應用程式。bootloader是系統啟動時執行的第一段 它主要用...
Linux 核心啟動過程
核心啟動前需要滿足的條件 暫存器,cpu,cache mmu 1.cpu暫存器的設定 r0 0 r1為機器碼 r2為啟動引數,標記列表在ram中的起始位址 2.cpu工作模式 必須禁止中斷 irq和fiq cpu必須設定為svc模式 3.cache和mmu的設定 mmu必須關閉 指令cache可以開...
linux核心啟動過程
linux核心啟動過程完成啟動核心並執行使用者空間的init程序的功能。當核心映像被載入到ram之後,bootloader的控制權被釋放。核心映像並不是可直接 執行的目標 而是乙個壓縮過的zimage 小核心 或bzimage 大核心,bzimage中的 b 是 big 意思 但是,並非zimage...