1. 程式人生 > >Linux核心移植和根檔案系統製作(詳細步驟精講)

Linux核心移植和根檔案系統製作(詳細步驟精講)

start_kernel是所有 Linux 平臺進入系統核心初始化後的入口函式,它主要完成剩餘的與硬體平臺相關的初始化工作,在進行一系列與核心相關的初始化後,呼叫第一個使用者程序-init 程序並等待使用者程序的執行,這樣整個 Linux 核心便啟動完畢。該函式所做的具體工作有:呼叫 setup_arch()函式進行與體系結構相關的第一個初始化工作;對不同的體系結構來說該函式有不同的定義。對於 ARM 平臺而言,該函式定義在arch/arm/kernel/Setup.c。它首先通過檢測出來的處理器型別進行處理器核心的初始化,然後通過 bootmem_init()函式根據系統定義的 meminfo 結構進行記憶體結構的初始化,最後呼叫
paging_init()開啟 MMU,建立核心頁表,對映所有的實體記憶體和 IO空間。建立異常向量表和初始化中斷處理函式;初始化系統核心程序排程器和時鐘中斷處理機制;初始化串列埠控制檯(serial-console);ARM-Linux 在初始化過程中一般都會初始化一個串列埠做為核心的控制檯,這樣核心在啟動過程中就可以通過串列埠輸出資訊以便開發者或使用者瞭解系統的啟動程序。建立和初始化系統 cache,為各種記憶體呼叫機制提供快取,包括;動態記憶體分配,虛擬檔案系統(VirtualFile System)及頁快取。初始化記憶體管理,檢測記憶體大小及被核心佔用的記憶體情況;初始化系統的程序間通訊機制(
IPC);當以上所有的初始化工作結束後,start_kernel()函式會呼叫 rest_init()函式來進行最後的初始化,包括建立系統的第一個程序-init 程序來結束核心的啟動。init 程序首先進行一系列的硬體初始化,然後通過命令列傳遞過來的引數掛載根檔案系統。最後 init 程序會執行使用者傳遞過來的“init=”啟動引數執行使用者指定的命令,或者執行以下幾個程序之一: