linux核心啟動過程

2021-06-18 20:49:25 字數 1544 閱讀 5537

第一步:電腦加電後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...