11 - U-Boot SPL(Secondary Program Loader)原理
文章目录一、概述二、形象比喻:工地上的先遣队三、SPL 在启动链中的位置四、SPL 核心函数分析4.1 board_init_f -- SPL 入口4.2 spl_next_stage -- 决定下一阶段4.3 rockchip_stimer_init -- 安全定时器五、SPL 启动设备检测六、SPL 内存布局七、SPL 配置关键选项📝 本章小结🏠 课后练习从这一章开始进入 U-Boot 启动链最核心的部分之一–SPL。前面第十节把 RK 平台的 U-Boot 启动流程过了一遍,大家应该已经对"BootROM - TPL - SPL - U-Boot Proper - Kernel"这条链有了印象。这一章专门拆 SPL 这一个环节,把它掰开揉碎讲透。要解决四个问题:为什么需要 SPL;SPL 如何在 DDR 中运行;DDR 初始化到底谁来做;RK3506 的 SPL 怎么决定下一阶段是加载 U-Boot 还是直接启动内核。这四个问题对应后面第四节的源码分析。开讲前先在板子上抓一份完整的启动日志,对照着日志听会更有感觉,因为会反复提到日志里那行"U-Boot SPL board init"。先接上一章的线:上节课编译过程里编出来的u-boot-spl.bin、u-boot-tpl.bin,就是本章要讲的东西。一、概述先看概述,把 SPL 在整个启动链里的定位搞清楚。SPL(Secondary Program Loader)是 U-Boot 启动链中最关键的"中间人"–它运行在 DDR 中(CONFIG_SPL_TEXT_BASE=0x03f00000),负责加载完整的 U-Boot(或直接加载内核)到 DDR 中运行。理解 SPL 的工作原理,是调试启动问题、优化启动时间的基础。一个反直觉的点先记住:SPL 不是跑在 SRAM 里的,而是跑在 DDR 中的。很多人直觉以为 SPL 这种早期代码一定在 SRAM,但 RK3506 不是–它能跑在 DDR 里,是因