嵌入式 Linux 启动机制全解析:从 Boot 到 Rootfs

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

  • 示例配置如下:

    conf 复制代码
    label rk-kernel.dtb linux-6.1.118
        kernel /Image-6.1.118
        fdt /rk-kernel.dtb
        initrd /initrd-6.1.118
        append 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
相关推荐
曦樂~8 小时前
Symmetric Ciphers对称加密
运维·服务器
mister_guo8 小时前
Elasticsearch:原理、Docker 安装与常用命令
大数据·运维·elasticsearch
Escalating_xu8 小时前
【Linux 网络编程】网络基础概念(下):IP、端口、Socket 与网络字节序,写代码前先打好基础
linux·网络·tcp/ip
刚入门的大一新生8 小时前
Linux-Ext系列文件系统
linux·运维·服务器
bmxy小明同学9 小时前
2026-10-11-幻觉治理
服务器·前端·javascript
灯澜忆梦9 小时前
【docker】#4 | Docker 自定义镜像与 Dockerfile
运维·docker·容器
无足鸟ICT9 小时前
【RHCA+】select循环
linux
SKH.9 小时前
Linux驱动-led、beep
linux·运维·单片机
mklpo14710 小时前
为不支持sse4.2命令集的老旧设备制作Win11 26H2系统镜像,2026-10-11。
运维·windows·python
碧海银沙音频科技研究院10 小时前
炬芯ATS308X的扩音器:麦克风到扬声器直通功能实现
java·linux·运维