原創:https://www.cnblogs.com/bluestorm/p/5981435.html 系統啟動過程大致流程:上電-->BIOS自檢-->系統引導-->啟動內核-->初始化系統 BIOS自檢 BIOS 輸入輸出系統,它可以永久的記錄在ROM的一個軟體,是操作系統輸入輸出管理的一部分 ...
原創:https://www.cnblogs.com/bluestorm/p/5981435.html
系統啟動過程大致流程:上電-->BIOS自檢-->系統引導-->啟動內核-->初始化系統
BIOS自檢
BIOS 輸入輸出系統,它可以永久的記錄在ROM的一個軟體,是操作系統輸入輸出管理的一部分
BIOS的功能有兩部分組成:
1.POST碼
2.Runtime服務
POST階段完成後它將從存儲器中被清除,而runtime服務會一直保留,用於目標操作系統的啟動。
步驟1:上電自檢POST,主要負責檢查系統外圍關鍵設備(例如:CPU,記憶體,音效卡,顯卡,鍵盤,I/O等)是否正常。
步驟2:步驟1執行成功後,便會執行一段小程式來枚舉本地設備對其初始化,這一步主要根據我們在BIOS中設置的系統啟動順序來搜索用於啟動系統的驅動,如:硬碟,光碟,U盤,網路等。以硬碟為例,BISO此時會去讀硬碟驅動器的第一個扇區,然後執行裡面的代碼,實際上BISO並不關心這個扇區的內容是什麼,它只負責讀取扇區的內容,並執行。
這一階段,主要是檢查硬體是否完好,找到第一個扇區的MBR,然後載入到記憶體並執行,再然後將控制權由BIOS轉交給MBR
系統引導
通常情況下,grub等一些常見的文件都是直接安裝到MBR中,下麵以grub為例
grub 引導可以分為兩個階段stage1和stage2(有些較新的grub有定義了stage1.5)
1.stage1:stage1是直接寫到MBR中的,這樣機器檢查完硬體後,就將控制權交給了gurb的代碼,stage1 任務很簡單,僅僅是將硬碟的0頭0道2扇區讀入記憶體,stage1是沒有識別的文件系統的能力。
2.stage2:負責將stage2或stage1.5從硬碟讀到記憶體中
啟動內核
當stage2被載入到記憶體執行時,它首先會解析grub的配置文件/boot/grub/grub.conf 然後載入內核鏡像到記憶體中,並將控制權轉交給內核,而內核會立即初始化系統中各個設備並做相關的配置,其中包括CPU,存儲設備等。
先載入內核,然後是initrd。
linux的設備驅動載入,有一部分是直接編譯到內核鏡像,另一部分是以模塊的形式放到initrd中。
初始化系統
/sbin/init 進程是系統其它所有進程的父進程,當它有了控制權之後,它會讀/etc/inittab文件來執行相應的腳步進行系統初始化,如:鍵盤,滑鼠,設置網路等。主要包括以下:
1.執行系統初始化腳本
2.執行/etc/rc.d/rc腳本
3.執行用戶自定義引導程式/etc/rc.d/rc.local
4.完成系統所有的啟動任務後,linux會啟動終端等待用戶登錄