Linux內核移植之四:內核啓動過程

內容來自 韋東山《嵌入式Linux應用開發完全手冊》

 

         與移植U-Boot的過程相似,在移植Linux之前,先了解它的啓動過程。Linux的啓動過程可以分爲兩部分:架構/開發板相關的引導過程、後續的通用啓動過程。如圖16.7所示是ARM架構處理器上Linux內核vmlinux的啓動過程。之所以強調是vmlinux,是因爲其他格式的內核在進行與vmlinux相同的流程之前會有一些獨特的操作。比如對於壓縮格式的內核zlmage,它首先進行自解壓得到vmlinux,然後執行vmlinux開始“正常的”啓動流程。

        引導階段通常使用匯編語言編寫,它首先檢查內核是否支持當前架構的處理器,然後檢查是否支持當前開發板。通過檢查後,就爲調用下一階段的start kernel函數作準備了。這主要分如下兩個步驟。

(1)連接內核時使用的虛擬地址,所以要設置頁表、使能MMU。

(2)調用C函數start_kernel之前的常規工作,包括複製數據段、清除BSS段、調用start_kernel函數。

        第二階段的關鍵代碼主要使用C語言編寫。它進行內核初始化的全部工作,最後調用rest init 函數啓動init 過程,創建系統第一個進程:init進程。在第二階段,仍有部分架構/開發板相關的代碼,比如圖16.7中的setup_arch函數用於進行架構/開發板相關的設置(比如重新設置頁表、設置系統時鐘、初始化串口等)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章