嵌入式 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
相关推荐
Guheyunyi27 分钟前
智慧停车管理系统:以科技重塑交通效率与体验
大数据·服务器·人工智能·科技·安全·生活
无奈笑天下30 分钟前
银河麒麟桌面OS使用分区编辑器将/backup分区删除并扩容至根分区参考教程
linux·数据库·经验分享·编辑器
秋刀鱼 ..30 分钟前
第七届国际科技创新学术交流大会暨机械工程与自动化国际学术会议(MEA 2025)
运维·人工智能·python·科技·机器人·自动化
CheungChunChiu7 小时前
Linux 内核设备模型与驱动框架解析 ——以 rk-pcie 为例
linux·运维·ubuntu
姚不倒7 小时前
负载均衡的概念、策略以及两个核心组件 Nginx 和 Kube-proxy 的对比。
运维·nginx·云原生·kubernetes
列逍7 小时前
Linux进程(三)
linux·运维·服务器·环境变量·命令行参数
水天需0108 小时前
VS Code Ctrl+Shift+V 预览 Markdown 无效的解决方案
linux
赖small强10 小时前
【Linux C/C++开发】Linux 平台 Stack Protector 机制深度解析
linux·c语言·c++·stack protector·stack-protector·金丝雀机制
陌路2011 小时前
Linux42 守护进程
linux
liteblue11 小时前
DEB包解包与打包笔记
linux·笔记