嵌入式 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
  • 加载 vmlinuzinitrd.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_aboot_bboot.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 高级配置详解

除了基本的 kernelfdtinitrdappend,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
相关推荐
白鹭2 小时前
nginx(介绍+源码安装+平滑升级和回滚)
linux·运维·服务器·nginx·回滚·平滑升级
DTS小夏2 小时前
Linux 系统 + IDEA+Scala 插件:新手进阶开发指南
linux·scala·intellij-idea
老黄编程2 小时前
--gpu-architecture <arch> (-arch)
linux·人工智能·机器学习
肖爱Kun2 小时前
LINUX中USB驱动架构—URB请求块
linux·驱动
wanhengidc3 小时前
云手机在办公领域中自动化的应用
运维·智能手机·自动化
鹿鸣天涯5 小时前
使用VMware Workstation Pro搭建Ubuntu服务器虚拟机
ubuntu
知星小度S5 小时前
系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】
linux·运维·服务器·进程
编码浪子8 小时前
趣味学RUST基础篇(异步)
服务器·rust·负载均衡
linjoe998 小时前
【Deep Learning】Ubuntu配置深度学习环境
人工智能·深度学习·ubuntu