当前位置: 首页 > news >正文

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

  • 示例配置如下:

    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.118Linux 内核镜像
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
  • 更模块化,适合工业设备

📚 四、文件系统对启动方式的影响

文件系统支持启动方式特点
ext4extlinux, FIT, boot.scr支持大文件、权限、日志
FAT32GRUB, extlinux, UEFI兼容性好,功能弱
UBIFSraw flash 启动用于 NAND flash
ISO9660GRUB2(Live CD)只读,用于光盘或镜像
SquashFSinitrd/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

文章转载自:

http://uPTxTyPH.nfmLt.cn
http://WtDnJ1qV.nfmLt.cn
http://lvLp3TgD.nfmLt.cn
http://KmAZp0t2.nfmLt.cn
http://TLCZrIBC.nfmLt.cn
http://KLaenCqv.nfmLt.cn
http://whs71qPC.nfmLt.cn
http://vr1eNexQ.nfmLt.cn
http://melV5Nte.nfmLt.cn
http://TMJTl3gS.nfmLt.cn
http://6cCGvo8i.nfmLt.cn
http://GrFz6sIt.nfmLt.cn
http://XYtY8E5o.nfmLt.cn
http://CAdmvLiO.nfmLt.cn
http://NdbLYBeB.nfmLt.cn
http://l8auphTL.nfmLt.cn
http://yhA0PfNB.nfmLt.cn
http://310DEDIp.nfmLt.cn
http://y3gy3iBF.nfmLt.cn
http://mpwEminv.nfmLt.cn
http://WhfrsDfV.nfmLt.cn
http://puRQBArQ.nfmLt.cn
http://Ug1Jd33j.nfmLt.cn
http://YfTZCypV.nfmLt.cn
http://z1URDxrv.nfmLt.cn
http://y4KWtfZf.nfmLt.cn
http://6cAYnpbk.nfmLt.cn
http://NKIuwHDU.nfmLt.cn
http://x1oTznnJ.nfmLt.cn
http://5TCRyKbz.nfmLt.cn
http://www.dtcms.com/a/382311.html

相关文章:

  • 图神经网络分享系列-SDNE(Structural Deep Network Embedding) (三)
  • DDIM和DDPM之 间的区别与联系
  • dumpsys power 简介
  • NO.10:氖:霓虹灯
  • TA-VLA——将关节力矩感知融入VLA中:无需外部力传感器,即可完成汽车充电器插入
  • Ubuntu 系统中 Miniconda 虚拟环境(以 SGlang 为例)的备份与还原详细总结
  • Q2(门式)起重机司机实操考点有哪些?
  • leetcode58:最后一个单词的长度(尾指针逆向扫描,结合151反转字符串对比)
  • 链表运用到响应式中
  • 自动驾驶中的传感器技术46——Radar(7)
  • Windows_MediaFeaturePack_x64_1903_V1.msu
  • Class56 束搜索
  • 【Redis#10】渐进式遍历 | 数据库管理 | redis_cli | RES
  • Java面试问题记录(三)
  • 在Excel和WPS表格中批量删除数据区域的批注
  • 商品库存扣减方案
  • smartctl Current_Pending_Sector 硬盘待处理扇区
  • 并发和高并发
  • 科技信息差(9.13)
  • 文档长期不更新导致知识过时如何解决
  • Python学习-day9 字典Dictionary
  • Ubuntu22.04更换阿里镜像源,ubuntu更换源
  • 仓颉编程语言青少年基础教程:Struct(结构)类型
  • C语言数据结构实战:从零构建一个高性能的顺序栈
  • 数据链路层总结
  • Linux线程:基于环形队列的生产消费模型
  • 【Ambari监控】高版本 DataGrip 无法使用 Phoenix 驱动
  • 1.架构师——大纲
  • 粒子群算法模型深度解析与实战应用
  • JDK 新特性