1. 引言
对于系统启动可以有多种方案,本文介绍结合 Flash 和 eMMC 的启动方式。该方案兼顾了 Flash 的快速启动与 eMMC 的大容量存储优势,是嵌入式 Linux 系统中常见的启动组合。
2. 整体启动流程
系统启动分为四个阶段,各阶段分工明确:
3. BootROM 阶段
BootROM 是固化在芯片内部的只读程序,上电后首先执行。它负责从外部存储介质加载 SPL。
- 从 Flash 中读取 SPL(因 Flash 支持 XIP,可快速加载)
- 校验 SPL 的完整性(如 CRC 校验)
- 将 SPL 拷贝到 SRAM 中执行
4. SPL 阶段
SPL(Secondary Program Loader)是 U-Boot 的简化版本,运行在 SRAM 中,负责初始化 DDR 并加载完整的 U-Boot。
- 初始化 DDR 控制器
- 从 Flash 或 eMMC 中加载 U-Boot 到 DDR
- 跳转到 U-Boot 入口
5. U-Boot 阶段
U-Boot 是完整的引导加载程序,运行在 DDR 中,负责加载内核和设备树。
- 初始化外设(网卡、存储控制器等)
- 从 eMMC 中读取内核镜像(zImage/Image)和设备树(dtb)
- 设置启动参数并跳转到内核
6. Kernel 阶段
内核接管系统后,完成剩余初始化并挂载根文件系统。
- 解压并初始化内核
- 挂载根文件系统(通常位于 eMMC 分区)
- 启动 init 进程,进入用户空间
7. 方案优势与注意事项
优势:
- Flash 启动快,适合快速加载 SPL 和 U-Boot
- eMMC 容量大、成本低,适合存放内核和根文件系统
注意事项:
- 需合理划分 eMMC 分区(boot、rootfs、data)
- 建议在 U-Boot 中配置环境变量以支持灵活的启动参数
- 生产环境建议增加启动冗余(如 A/B 分区升级)