核心概念embedded-development
嵌入式 Linux 启动链
按 Boot ROM、固件或引导加载器、Linux 内核和用户空间定位嵌入式设备启动故障。
**嵌入式 Linux 启动链(boot chain)**是处理器上电后,从只读启动代码逐级装载到 Linux 用户空间的控制权传递过程。常见逻辑阶段如下:
Boot ROM → 固件或引导加载器 → Linux 内核 + DTB + 可选 initramfs → 根文件系统中的 init(PID 1) → 系统服务与应用| 阶段 | 主要职责 | 常见故障线索 |
|---|---|---|
| Boot ROM | 从芯片支持的介质定位下一阶段 | 无串口输出、固定 LED 错误码 |
| 固件或引导加载器 | 初始化必要硬件,选择启动介质,装载内核、DTB 和可选 initramfs | 找不到介质、内核或设备树 |
| Linux 内核 | 建立内存管理,解析设备树,初始化驱动并挂载根文件系统 | 串口内核日志、挂载根分区失败 |
| init / PID 1 | 启动用户空间服务与目标应用 | 内核已启动但没有登录或服务失败 |
initramfs 是可选的早期用户空间,常用于加载根文件系统所需模块或定位真正的根文件系统;它不等同于最终 rootfs。
U-Boot 是常见的嵌入式引导加载器,但不是所有设备都使用它。标准 Raspberry Pi OS 启动流程由 Raspberry Pi 固件负责;Raspberry Pi 4 及之后的主要机型使用 SPI EEPROM 中的第二阶段引导加载器,较早机型的流程不同。排查时必须先确认板卡型号和实际引导软件。
- 找到最后一个有可靠输出的阶段,例如 ROM 错误码、引导加载器串口或内核日志。
- 检查交给下一阶段的输入:启动介质、镜像、DTB、内核命令行和 rootfs。
- 一次只改变一个变量,并保留可启动介质或已知可用配置。
- 不要把“内核已加载”“根文件系统已挂载”和“服务已启动”当成同一状态。
- 概念:设备树
- 命令:uname、vcgencmd
- 实战:只读检查 Raspberry Pi 运行时设备树