ARM 启动流程

从上电到 Bootloader,再到内核或应用

Posted by Yvain Zhang on March 17, 2026

ARM 系统启动通常可以分为两个阶段:

  1. 硬件初始化阶段
  2. 软件启动阶段

前者负责让芯片和基础外设进入可运行状态,后者负责把控制权逐步交给 Bootloader、内核或应用。

1. 硬件初始化阶段

处理器上电后,最先执行的是固化在 ROM、Flash 或 SoC 启动介质中的初始化代码。这个阶段的目标是建立最小可运行环境,常见工作包括:

  • 初始化时钟和复位逻辑
  • 配置中断控制器
  • 初始化串口,便于早期调试输出
  • 初始化 RAM、Flash 或其他启动介质
  • 配置必要的总线和基础外设

这一阶段通常由芯片厂商提供底层支持,代码规模较小,但决定了后续系统是否能顺利进入软件启动流程。

2. 软件启动阶段

硬件初始化完成后,处理器开始执行启动介质中的软件代码。大多数系统会先进入 Bootloader,再由 Bootloader 加载操作系统或应用程序。

软件启动阶段通常包括:

  • 初始化更完整的运行环境
  • 初始化内存管理
  • 初始化更多外设
  • 加载内核映像、设备树、根文件系统或应用镜像
  • 设置启动参数
  • 将控制权交给内核或主程序

3. Bootloader 的职责

Bootloader 是硬件初始化和操作系统之间的桥梁,常见职责包括:

  • 进一步初始化 DDR、串口、存储接口
  • 校验镜像有效性
  • 从 Flash、eMMC、SD 卡、网络等介质加载镜像
  • 设置内核启动参数
  • 跳转到内核入口地址

在 Linux 系统中,常见做法是由 Bootloader 加载内核和设备树,然后进入内核启动流程;在 RTOS 或裸机场景中,也可能直接加载应用程序。

4. Linux / RTOS 场景差异

Linux 场景

典型路径是:

上电 -> ROM/固化代码 -> Bootloader -> Linux Kernel -> 用户空间

特点:

  • 启动链较长
  • 对内存、设备树、根文件系统依赖较强
  • 更适合复杂系统

RTOS 场景

典型路径是:

上电 -> 固化代码/Bootloader -> RTOS -> 应用任务

特点:

  • 启动链相对更短
  • 系统结构更轻量
  • 更强调实时性和资源受限环境下的稳定性

5. 启动流程的核心关注点

分析 ARM 启动流程时,建议重点关注以下问题:

  • 第一段代码从哪里开始执行
  • 早期可用内存何时建立
  • 串口日志最早从哪里打印
  • Bootloader 和内核的职责边界是什么
  • 设备树、根文件系统或应用镜像如何被加载
  • 启动慢的瓶颈位于硬件初始化、存储读取还是内核初始化

6. 总结

ARM 启动流程本质上是在逐步建立运行环境:

  • 先让硬件可用
  • 再让软件具备加载能力
  • 最后把控制权交给内核或应用

理解这个过程的关键,不在于记住所有细节,而在于清楚每个阶段“谁在执行、做了什么、交给谁”。