標籤:
轉載請註明出處:jiq?欽‘s technical Blog
(1) CPU自身初始化:
CPU加電之後需要進行一系列的初始化工作;
(2) CPU載入BIOS(Basic InputOutput System):
CPU執行一個固定的位置(一般是0xFFFFFFF0)的指令。這是一條跳轉指令,跳轉到BIOS代碼的首部。BIOS固化在主板上一個很小的ROM中,主要完成兩個工作:
(a) 加電自檢(POST):完成系統硬體(記憶體,系統匯流排等)檢測;
(b) 載入核心引導程式:讀取主引導記錄MBR(啟動裝置的第一個扇區),MBR中儲存了核心引導程式的開始部分,BIOS載入MBR並執行。
(3) 引導程式載入核心映像:
核心引導程式分為兩個階段:
(a)主引導程式掃描分區表,將位於使用中的磁碟分割引導記錄中的次引導程式載入到記憶體並執行;
(b)次引導程式負責載入核心映像到記憶體;
(4) 核心映像開始工作:
自解壓,然後調用init/main.c中的start_kernel()函數執行;
至此核心的引導過程已經結束,下面進入核心的初始化過程!!!
核心的初始化過程從start_kernel()函數開始,直至第一個使用者進程init結束:
(1) start_kernel()函數:相當於核心整個初始化工作的man函數。
完成核心的大部分初始化工作,主要是儲存管理、裝置管理、檔案管理、進程管理等任務的初始化;
(2) reset_init()函數:後續初始化,由start_kernel()函數調用;
(3) kernel_init()函數:完成裝置驅動程式的初始化,並調用init_post()函數啟動使用者空間中的init進程;
(4) init_psot()函數:啟動使用者空間中的init進程,init標準位置在/sbin/init,init進程讀取/etc/inittab檔案來觸發諸如接受使用者登入,設定鍵盤,網路等這些進程。至此系統已經成功啟動了!!!
Linux核心(一)系統啟動過程