揭開 Linux 核心啟動過程的神秘面紗
Linux 系統的啟動過程是現代運算中最複雜的序列之一。它涉及硬體、韌體與核心之間的交接,將 CPU 從原始狀態轉換為功能完整的多工環境。對於系統架構師、核心開發人員以及任何對作業系統實際運作之底層機制感興趣的人來說,理解這一流程至關重要。
The Initial Hand-off: From Firmware to Kernel
在 Linux 核心接管控制權之前,系統必須經過由系統韌體(BIOS 或 UEFI)處理的一系列初始化步驟。韌體的主要角色是執行開機自我測試(POST)並在儲存裝置上尋找開機載入程式(bootloader)。
一旦開機載入程式(例如 GRUB)被執行,它會將壓縮的核心映像檔——通常稱為 bzImage——載入到記憶體中。bzImage 是「big zImage」,一個自我解壓縮的可執行檔,其中包含實際的核心程式碼,並經過壓縮以節省空間並加快從磁碟載入的速度。
The Role of initrd and Early Boot
啟動序列中最關鍵的組件之一是 initrd(initial ramdisk)。由於核心需要掛載根檔案系統才能繼續啟動,但讀取該檔案系統所需的驅動程式(例如 SCSI、SATA 或網路驅動程式)可能就位於該檔案系統上,因此產生了「雞生蛋、蛋生雞」的問題。
initrd 透過提供載入到 RAM 中的臨時根檔案系統來解決此問題。這使得核心可以:
- 載入必要的驅動程式。
- 設定環境。
- 在磁碟上或透過網路協定尋找並掛載實際的永久根檔案系統。
正如曾參與 LTSP (Linux Terminal Server Project) 等專案的社群成員所指出的,這種機制使得進階啟動情境成為可能,例如透過 TFTP 獲取核心並透過 NFS 掛載根檔案系統。
Transitioning to User Space
一旦核心初始化了其內部資料結構、記憶體管理和硬體驅動程式,它就進入了啟動的最後階段:啟動第一個使用者空間程序。
在 Linux 中,這個程序傳統上是 init(或在大多數現代發行版中是 systemd)。核心從核心模式轉換到使用者模式,有效地將系統控制權移交給使用者空間初始化系統,接著由該系統管理其餘的系統服務與登入 shell。
Conclusion
雖然 Linux 核心啟動過程是對底層系統程式設計的深入探討,但它揭示了作業系統管理從原始硬體到高階作業環境轉換的優雅方式。從 bzImage 的解壓縮到 initrd 提供的臨時橋樑,每一步都是經過計算的動作,以確保系統達到穩定且可用的狀態。