《一》:詳解Linux啟動流程及需要使用到的配置文件
POST加電自檢-->BIOS(Boot Sequence)->MBR(bootloader)->Kernel->initrd->rootfs(/sbin/init)
下面對每個啟動流程做詳細解釋:
POST(加電自檢)
計算機本身不執行任何程序,所以系統必須要完成自舉的過程,在CPU的控制下,將RAM芯片中的某個程序映射到ROM地址空間,並執其中的指令完成系統硬件健康狀況檢查,例如存儲設備、網卡、CPU、聲卡等其他硬件設備是否完好。當檢查完成後,所有硬件或基本硬件、核心硬件沒有問題,則下一個啟動流程->BIOS
BIOS(Boot Sequence)
按照BIOS所設定的系統啟動流程,根據引導次序(Boot Sequence)自上而下的尋找對應存儲設備上操作系統的MBR,如果MBR存在,則會讀取MBR中的bootloader
MBR(bootloader)
會根據MBR所指引的活動分區上尋找系統分區中的 bootloader,bootloader稱為是一段程序,占據446字節。在bootloader當中配置了所要引導操作系統的內核所在的位置,因此BIOS被載入內存以後,當它實現將控制權限轉交給bootloader以後,bootloader接收整個系統的控制權限,而後根據用戶的選擇去讀取相應操作系統中的內核,並將內核裝載入內存的某個空間位置,解壓縮,這時kernel就可以在內存中活動,並根據kernel本身功能在內存當中探索硬件並加載硬件驅動程序並完成內核初始化,bootloader會將控制權限轉交給內核。
Kernel(初始化)
我們知道kernel是完成探索硬件及加載硬件驅動程序,並以讀寫的方式掛載根文件系統。那麼這裡就出現一個比較詭異的問題,是什麼問題呢?
我們又知道,要想訪問真正的根文件系統(rootfs)的話,就必須加載根文件系統中的設備,這時根文件系統又沒有掛載,要掛載根文件系統又得加載根文件系統中的驅動程序,哪怎麼辦呢?這是就用到了initrd文件了。
在來說下kernel初始化所要工作的內容做下簡單總結:
探測硬件->加載驅動(initrd)->掛載根文件系統->rootfs(/sbin/init)
initrd功能介紹
其實說白了initrd就是一個虛擬的文件系統,裡面有/、lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目錄,其實你會發現裡面的目錄有點像真的/對吧,所以我們稱之為虛擬的根文件系統,作用就是將kernel和真的根文件系統建立關聯關系,讓kernel去initrd中加載根文件系統所需要的驅動程序,並以讀寫的方式掛載根文件系統,並讓執行用戶當中第一個進程init。
/sbin/init(/etc/inittab)
/sbin/init啟動會用到/etc/inittab所定義的條目,如:默認登陸級別id:3:initdefault:(這裡就是默認啟動3級別)