1. 嵌入式系统启动的幕后英雄:BootROM与U-Boot
当你按下嵌入式设备的电源键,看似简单的开机动作背后,其实隐藏着一场精密的"接力赛"。BootROM和U-Boot就像两位默契的接力选手,共同完成了从硬件上电到系统加载的全过程。作为在嵌入式领域摸爬滚打多年的开发者,我见过太多因为不理解这个机制而踩坑的案例。今天我们就来彻底拆解这个启动过程。
BootROM是芯片内部的"固化大脑",它就像是设备与生俱来的本能反应。我在调试瑞芯微RK3399时曾用示波器捕捉到:上电后3毫秒内,BootROM就完成了CPU时钟初始化,这个速度比眨眼还快。而U-Boot则像是设备的"后天学习能力",它灵活可配置,能适应各种复杂的启动场景。两者最根本的区别在于:
- BootROM是芯片出厂时固化的,无法修改
- U-Boot存储在外部Flash,开发者可以随时升级
- BootROM代码通常只有几KB,而U-Boot可能有几百KB
2. BootROM的启动全流程解析
2.1 芯片上电的瞬间发生了什么
当3.3V电源稳定的那一刻(我实测过这个建立时间通常在100-500微秒),CPU的复位引脚会释放,程序计数器(PC)会指向BootROM的起始地址。这个地址在不同架构中各有不同:
- ARM Cortex-M系列通常是0x00000000
- ARM Cortex-A系列可能是0xFFFF0000
- RISC-V架构则常见0x80000000
我在STM32F4上做过实验,用逻辑分析仪抓取BootROM执行时的信号,发现它会先读取BOOT引脚状态来决定启动介质。这个设计非常巧妙,通过硬件引脚就能选择从SPI Flash还是SD卡启动。
2.2 BootROM的六步标准动作
-
硬件初始化:包括时钟树配置(比如将内部8MHz振荡器倍频到72MHz)、基本存储控制器初始化。我在全志V3s上实测发现,BootROM会将SRAM初始化为WS=1的


559

被折叠的 条评论
为什么被折叠?



