uboot分为uboot-spl和uboot两个组成部分。SPL是Secondary Program Loader的简称,第二阶段程序加载器,这里所谓的第二阶段是相对于SOC中的BROM来说的,之前的文章已经有所介绍,SOC启动最先执行的是BROM中的固化程序。
BROM会通过检测启动方式来加载第二阶段bootloader。uboot已经是一个bootloader了,那么为什么还多一个uboot spl呢?
这个主要原因是对于一些SOC来说,它的内部SRAM可能会比较小,小到无法装载下一个完整的uboot镜像,那么就需要spl,它主要负责初始化外部RAM和环境,并加载真正的uboot镜像到外部RAM中来执行。
所以由此来看,SPL应该是一个非常小的loader程序,可以运行于SOC的内部SRAM中,它的主要功能就是加载真正的uboot并运行之。
uboot启动分三个阶段
1. BL0
ROM上的固化程序
2. BL1(u-boot-spl)
主要工作有:
初始化部分时钟(和SDRAM相关)
初始化DDR(外部SDRAM)
从存储介质上(比如SD\eMMC\nand flash)将BL2镜像加载到SDRAM上
验证BL2镜像的合法性
跳转到BL2镜像所在的地址上
通过uboot-spl编译脚本:u-boot/arch/arm/cpu/u-boot-spl.lds
ENTRY(_start)
发表评论