在各種體繫結構平台上,多數核心映像都採用壓縮格式(MIPS 平台例外,它的映像採用非壓縮格式) 。Linux 系統的一般啟動過程通常劃分為核心引導、核心啟動和應用程式啟動3 個階段。
第一階段是目標板硬體初始化,解壓核心映像,再跳轉到核心映像入口。這部分的工作一般由目標板的引導程式和核心映像的自引導程式完成。不同體繫結構的目標板引導的方式和程式都有差異。Decompress Kernel --> Call Kernel,這和bootloader有關。
第二階段是核心的初始化,初始化裝置驅動,掛接根檔案系統。這裡是 Linux 核心通用的啟動函數入口。所有體繫結構的目標板都順序調用統一的函數,儘管有些函數的代碼實現是跟體繫結構相關的。Initialize hardware, Initialize device driver, Mount root filesystem, Execute /sbin/init
第三階段是執行使用者空間的 init 程式,完成系統初始化、啟動相關服務和系統管理使用者登入等工作。這個階段可以提供給使用者互動介面,例如:Shell 命令列或者圖形化的視窗介面。也可以自動執行應用程式。login prompt, Start network service, Start X-Windows
在 Linux 系統啟動過程中,有兩個關鍵點。一個是核心映像的解壓啟動;另一個是根檔案系統的掛接。目標板處理器上電或者複位後,首先執行引導程式(Bootloader) ,初始化記憶體等硬體,然後把壓縮的核心映像載入到記憶體中,最後跳轉到核心映像入口執行。這樣就把控制權完全交給核心映像了。接下來核心映像繼續執行, 完成自解壓或者重定位,然後跳轉到解壓後的核心代碼入口。這部分主要是 Linux 核心的自引導程式,又叫作 Linux bootloader,包含在核心原始碼中。這部分引導代碼相對簡單,不可能替代目標板上的 Bootloader。
因為檔案和應用程式都要儲存在檔案系統中,所以 Linux 離不開檔案系統。在核心啟動到最後,必須掛接一個根檔案系統。從檔案系統的目錄下找到 init 程式,啟動 init 進程。
來自:《嵌入式 Linux 系統開發技術詳解——基於 ARM》
我同意網上的一些書評,認為這本書寫得比較雜亂,似講義。不適合用作為入門或者學習的。適合於正在看其他相關的書,用來輔助閱讀,以及對嵌入式Linux系統比較瞭解的人查閱。換句話說不是本好書,但值得翻翻。