🚀 嵌入式 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 |