一、BootROM概述:什么是BootROM、BootROM在系统启动中的角色、BootROM与BIOS/UEFI的关系

1.1 什么是BootROM?——芯片上电后第一个执行的代码

BootROM,全称是Boot Read-Only Memory。说白了,它就是固化在芯片内部的一块只读存储器,里面存放着芯片上电后第一条要执行的指令。

我经常跟团队里的新人说:BootROM是系统启动的“第一把火”。没有它,CPU连自己该干什么都不知道。

BootROM有几个关键特征:

  • 不可修改——芯片出厂时就写死了,用户改不了。我遇到过有人问“能不能升级BootROM”,答案是:不能,除非换芯片。
  • 容量极小——通常只有几十KB到几百KB。别指望它干大事,它只负责“把下一级代码请进来”。
  • 位置固定——芯片复位后,PC指针直接指向BootROM的起始地址。这是硬件设计决定的。

核心理解:BootROM = 系统启动的“最小可信基”。它不需要外部存储,不需要初始化DRAM,就能运行。

1.2 BootROM在系统启动中的角色——从复位到加载引导程序

系统上电后,BootROM到底干了哪些事?我把它拆成几个步骤:

  1. 硬件初始化——设置CPU模式、关闭中断、配置时钟。这一步很基础,但错了就全完蛋。
  2. 检测启动介质——BootROM会去扫描NAND Flash、eMMC、SD卡、UART等接口,寻找可用的启动镜像。
  3. 加载引导程序——找到启动介质后,把下一级代码(比如SPL、U-Boot、或BIOS的初始模块)拷贝到内部SRAM中。
  4. 跳转执行——最后一条指令就是跳转到加载进来的代码入口。

嗯,这里有个坑。我记得有一次调试一块ARM开发板,BootROM死活检测不到eMMC。查了半天,原来是eMMC的供电时序没对上。BootROM启动太快,eMMC还没准备好。所以,硬件设计时一定要考虑BootROM的检测时序。

我的经验:BootROM的启动顺序通常由芯片的“启动引脚”决定。比如拉高BOOT0引脚就从NAND启动,拉低就从UART启动。设计电路时,这些引脚一定要留出测试点。

下面这张图展示了BootROM在整个启动流程中的位置:

系统启动流程:BootROM的核心位置 BootROM 芯片内部ROM SPL / FSBL 内部SRAM中运行 U-Boot/BIOS DRAM中运行 容量:几十KB 容量:几十~几百KB 容量:几MB 不可修改 可更新 功能完整 关键点 BootROM是“启动链”的第一环,它加载SPL,SPL再加载U-Boot/BIOS BootROM不需要DRAM就能运行,这是它和后续阶段最大的区别

1.3 BootROM与BIOS/UEFI的关系——不是替代,是上下游

很多人搞不清BootROM和BIOS/UEFI的区别。我直接说结论:BootROM是BIOS/UEFI的“前传”。

你看啊,在x86平台上:

  • BootROM(在CPU内部)→ 初始化CPU最基本的状态 → 加载BIOS的初始模块
  • BIOS/UEFI(在Flash中)→ 初始化内存、外设 → 加载操作系统

在ARM嵌入式平台上更明显:

  • BootROM → 加载SPL(Secondary Program Loader)
  • SPL → 初始化DRAM → 加载U-Boot
  • U-Boot → 加载Linux内核

说白了,BootROM是“硬件的最后一公里”,BIOS/UEFI是“软件的第一公里”。

注意:有些芯片厂商会把BootROM和BIOS的功能混在一起说。比如Intel的ME(Management Engine)里就包含了类似BootROM的代码。但概念上,BootROM特指芯片内部那个不可修改的ROM。

1.4 为什么BootROM这么重要?——我踩过的坑

我曾经接手过一个项目,板子死活起不来。用示波器量时钟、量电源,都没问题。最后用JTAG挂上去一看,BootROM执行到一半就卡住了。

原因是什么?BootROM的启动引脚被焊错了。它一直在等UART输入,但我们的设计是从NAND启动。就这么一个小问题,折腾了三天。

所以,我给大家几个建议:

  • 设计阶段——仔细看芯片手册的BootROM章节,确认启动引脚、启动顺序、时序要求。
  • 调试阶段——用JTAG或串口抓BootROM的打印信息(如果有的话)。很多芯片的BootROM会通过UART输出调试信息。
  • 生产阶段——确保启动介质的第一个扇区是有效的。BootROM通常只检查前几个字节的签名。

避坑指南:我曾经见过一个团队,把BootROM和U-Boot的代码混在一起编译。结果BootROM区域超了,芯片直接变砖。记住:BootROM的容量是固定的,别想着往里面塞东西。

1.5 小结

BootROM虽然小,但它是整个系统启动的基石。没有它,CPU连“我是谁、我在哪、我要干什么”都不知道。

理解BootROM,你就能理解为什么有些板子启动快、有些慢,为什么有些芯片支持从USB启动、有些不支持。说白了,这些都是BootROM的设计选择。

下一章,我会详细讲BootROM的启动参数配置——那些藏在芯片手册里的寄存器,到底该怎么设。


本章核心要点:

  • BootROM是芯片内部不可修改的只读存储器,存放第一条执行指令
  • BootROM负责初始化硬件、检测启动介质、加载下一级引导程序
  • BootROM是BIOS/UEFI的“前传”,两者是上下游关系
  • BootROM的启动引脚、时序、容量是设计时最容易踩坑的地方
可可精品资料库