🚀 嵌入式 Linux 啟動機制全解析:從 Boot 到 Rootfs
在嵌入式系統中,Linux 的啟動流程不僅是內核加載的過程,更是 bootloader、設備樹、初始根文件系統、啟動配置文件等多個組件協同工作的結果。不同的文件系統和啟動方式會影響系統的啟動速度、兼容性、安全性和可維護性。本文以 RK3588 為例,全面梳理 Linux 的啟動流程、主流啟動方式、文件系統影響以及 extlinux.conf 的高級配置技巧。
🧠 一、Linux 啟動流程概覽(以 ext4 + extlinux 為例)
當系統使用 ext4 格式的 /boot
分區,并采用 extlinux 啟動配置時,啟動流程如下:
🔹 1. 上電 → BootROM → U-Boot
- SoC 上電后,BootROM 從 eMMC/SD/NVMe 加載 U-Boot
- U-Boot 初始化 DRAM、串口、USB 等外設
🔹 2. U-Boot 解析 extlinux.conf
-
讀取
/boot/extlinux/extlinux.conf
,加載內核、設備樹、initrd -
示例配置如下:
label rk-kernel.dtb linux-6.1.118kernel /Image-6.1.118fdt /rk-kernel.dtbinitrd /initrd-6.1.118append root=/dev/mmcblk0p7 rw console=ttyFIQ0 loglevel=8
🔹 3. 加載內核與設備樹
- 內核鏡像(Image)加載到內存
- 設備樹(dtb)描述硬件結構,供內核解析
🔹 4. 加載 initrd(初始根文件系統)
- 內核掛載 initrd,執行其中的
/init
腳本 - 完成驅動加載、根文件系統掛載準備
🔹 5. 切換到真正的 rootfs
- 掛載
/dev/mmcblk0p7
等真實根分區 - 啟動 PID 1(如 systemd 或 busybox init)
📦 二、/boot 分區文件作用解析
文件名 | 作用 |
---|---|
Image-6.1.118 | Linux 內核鏡像 |
initrd-6.1.118 | 初始根文件系統 |
rk-kernel.dtb | 設備樹文件 |
extlinux.conf | 啟動配置文件 |
System.map / config-6.1.118 | 內核符號表與編譯配置 |
logo.bmp | 啟動 logo 圖像 |
🧩 三、常見啟動方式匯總
除了 extlinux + ext4,還有多種啟動方式適用于不同場景:
? 1. FAT32 + U-Boot + extlinux
/boot
分區為 FAT32,兼容 Windows 工具- U-Boot 讀取
extlinux.conf
,加載內核、dtb、initrd
? 2. FAT32 + GRUB(x86 系統)
- GRUB 讀取
/boot/grub/grub.cfg
- 加載
vmlinuz
和initrd.img
? 3. U-Boot + FIT Image
- 所有內容打包成
.itb
文件 - 啟動更簡潔,適合量產和安全校驗
? 4. U-Boot + boot.scr 腳本
- 使用
mkimage
生成啟動腳本 - U-Boot 執行腳本加載內核和根文件系統
? 5. raw image 啟動
- 內核、dtb、initrd 燒錄到固定偏移地址
- 不依賴文件系統,適合極簡系統
? 6. UEFI + systemd-boot
- FAT32 EFI 分區 + ext4 根分區
- 用于 ARM64 或 x86 的桌面系統
? 7. Android A/B 分區啟動
- 啟動
boot_a
或boot_b
的boot.img
- 實現無縫 OTA 和回滾機制
? 8. OP-TEE 安全啟動
- 啟動 OP-TEE TEE OS → Linux
- 常用于安全芯片和加密模塊
? 9. PXE 網絡啟動 + NFS 根文件系統
- 從網絡加載內核和 initrd
- 根文件系統掛載遠程 NFS,適合無本地存儲設備
? 10. kexec 重啟內核
- 在運行中的 Linux 中加載另一個內核
- 用于 crash dump、快速重啟等場景
? 11. Barebox 啟動
- 替代 U-Boot 的 bootloader
- 更模塊化,適合工業設備
📚 四、文件系統對啟動方式的影響
文件系統 | 支持啟動方式 | 特點 |
---|---|---|
ext4 | extlinux, FIT, boot.scr | 支持大文件、權限、日志 |
FAT32 | GRUB, extlinux, UEFI | 兼容性好,功能弱 |
UBIFS | raw flash 啟動 | 用于 NAND flash |
ISO9660 | GRUB2(Live CD) | 只讀,用于光盤或鏡像 |
SquashFS | initrd/initramfs | 壓縮只讀,適合嵌入式 |
🧠 五、extlinux.conf 高級配置詳解
除了基本的 kernel
、fdt
、initrd
和 append
,extlinux.conf 還支持以下高級配置項:
配置項 | 說明 | 示例 |
---|---|---|
LABEL | 啟動項名稱 | LABEL linux-debug |
MENU LABEL | 菜單顯示名稱 | MENU LABEL Debug Kernel |
MENU DEFAULT | 設置為默認啟動項 | MENU DEFAULT |
MENU TIMEOUT | 菜單等待時間(秒) | MENU TIMEOUT 5 |
MENU BACKGROUND | 菜單背景圖像 | MENU BACKGROUND logo.bmp |
MENU TITLE | 菜單標題 | MENU TITLE Firefly Boot Menu |
MENU HIDDEN | 隱藏菜單(自動啟動) | MENU HIDDEN |
MENU COLOR | 菜單顏色設置 | MENU COLOR screen 37;40 #00000000 #00000000 none |