乾貨滿滿~Linux系統啟動(內含名詞解析)
Linux系統啟動過程
一、啟動過程
1、載入 BIOS 的硬體資訊與進行自我測試,並依據設定取得第一個可開機的裝置
2、讀取並執行第一個開機裝置內MBR的bootLoader
3、依據 bootloader的設定載入 Kernel
4、Kernel開始偵測硬體與載入驅動程式 (初始化Kernel)
5、把Kernel掛載到根檔案系統上
6、啟動完成
二、名詞解釋
BIOS
全稱"Basic Input Output System",中文名稱是"基本輸入輸出系統"。它是一組固化到計算機內主機板上一個ROM晶片上的程式,包含了CPU的相關資訊、裝置啟動順序資訊、硬碟資訊、記憶體資訊、時鐘資訊等。
MBR
全稱“MasterBoot Record” ,中文名稱是“主引導分割槽”,是啟動裝置的第一個扇區,安裝bootLoader的地方。
bootLoader
中文名稱為“引導裝載程式”,它是系統加電後執行的第一段軟體程式碼,在作業系統核心執行之前執行的一段裸機程式,負責初始化硬體裝置,準備好軟體環境,最後呼叫作業系統核心。
bootLoader嚴重地依賴於硬體而實現的,所以不同的架構有著不同的bootLoader,常見的bootLoader有uboot,LILO,grub等
Kernel偵測硬體
當我們藉由bootLoader的管理而開始讀取核心檔案後,接下來Linux就會將核心解壓到主儲存器當中,並且利用核心的功能,開始測試與驅動各個周邊裝置,包括儲存裝置、CPU、網路卡、音效卡等等。 此時 Linux 核心會以自己的功能重新偵測一次硬體,而不一定會使用 BIOS 偵測到的硬體資訊喔!
掛載根檔案系統
由於核心模組(驅動程式)需要放置到磁碟根目錄內, 因此在開機的過程中核心必須要掛載根目錄,這樣才能夠讀取核心模組提供載入驅動程式的功能。
啟動過程流程圖
問:
為什麼開機不能直接執行kernel,把kernel放在啟動裝置的第一個扇區(即MBR所在的地方),把所有事情都交給kernel做呢?
其實它的思想類似於一個板級支援包:kernel執行的時候需要具備一個基本的硬體執行條件,而這個環境的初始化(最底層的一些硬體初始化、硬體資訊設定)需要bootloader來完成,也許這樣kernel的設計才能保持一定的一致性。