兩階段架構
- 第一階段:Bootloader (GRUB/U-Boot/BIOS/UEFI)
- 硬體初始化:CPU 模式切換、記憶體控制器、時鐘、外設掃描。
- 載入核心映像 (vmlinuz/Image) 到記憶體指定位址。
- 載入 initramfs/initrd (初始根檔案系統)。
- 跳轉進入核心進入點
start_kernel。
- 第二階段:Linux Kernel 初始化
- 核心子系統啟動:記憶體管理、行程調度、VFS、驅動模型。
- 掛載真實根檔案系統 (pivot_root / switch_root)。
- 啟動
init (PID 1, systemd/SysVinit)。
- 用戶空間服務啟動。
為什麼不合併?
1. 硬體抽象層分離
Bootloader 只需知道**「如何啟動這塊硬體」**,不需知道 Linux 核心內部結構。核心只需知道**「硬體已就緒,我接手管理」**。
2. 硬體多樣性爆炸
x86、ARM、RISC-V、MIPS... 每種架構、每塊開發板的啟動流程、記憶體佈局、外設樹皆不同。若核心包含所有啟動邏輯:
- 核心體積暴漲、編譯配置極複雜。
- 新硬體上市需重新編譯/發布核心 — **不可能維護**。
Bootloader (U-Boot/GRUB/EDK2) 專責處理平台差異,提供**統一啟動介面**給核心。
3. 彈性與模組化
- 同一核心可在不同 Bootloader 啟動 (QEMU、實體板、雲端虛擬機)。
- 支援多重啟動 (Windows/Linux/BSD 共存),Bootloader 選單決定載入哪個核心。
- initramfs 可攜帶偵測硬體、載入驅動的腳本,核心本體保持精簡。
4. 安全性與信任鏈
- UEFI Secure Boot → 驗證 Bootloader 簽名 → Bootloader 驗證核心簽名 → 核心驗證模組簽名。**分層驗證**,單點失效不影響整體。
- TPM 量度啟動過程各階段雜湊值,遠端認證完整性。
類比
**Bootloader = 建築地基與骨架** (因地制宜,支撐上層)。
**Kernel = 智慧型建築管理系統** (標準化、可攜遷、負責日常運營)。
分離硬體初始化與作業系統初始化,是支撐 Linux 跨架構、跨平台、長期演進的關鍵架構決策。