u-boot spl 学习总结
什么是SPL?
SPL(secondary program loader)
是一个十分小的bin文件,它是用来引导主u-boot文件。对于一些SRAM
很小的SOC
,无法一次性加载ROM
中的bootloader
到SRAM
中,因为一般SRAM
远远小于bootloader
的大小。这时候SPL
应运而生了。
加载过程
嵌入式系统的SOC
内部会有比较小的SRAM
,而外部的一般会有DDR
或者SDRAM
,后面的RAM
就是外部RAM
;SPL
会先被加载到SRAM
中,然后初始化DDR
或者SDRAM
,总之会初始化外部的RAM
,然后再把主u-boot
加载到RAM
;
如下图所示:
- 图中①是
SPL
在u-boot第一阶段的装载程序,初始化最基本的硬件,比如关闭中断,内存初始化,设置堆栈等最基本的操作,设置重定位; - 图中②是会装载主
u-boot
程序,然后初始化其他板级硬件,比如网卡,nand flash等待,设置u-boot
本身的命令和环境变量; - 图中③是加载
kernel
到RAM
,然后启动内核;
整体的加载过程:
下面是StackOverflow
上的一个解释:
这里以OMAP平台为例进行解释(仅提供一些实际背景而不仅仅是理论或常识)。看看初学者的一些事实:
在基于OMAP的平台上,上电后运行的第一个程序是ROM代码(类似于PC上的BIOS)。
ROM代码查找引导加载程序(必须是名为“MLO”的文件,位于MMC的活动第一个分区,必须格式化为FAT12 / 16/32, - 但这是详细信息)
ROM代码将该“MLO”文件的内容复制到静态RAM(因为常规RAM尚未初始化)。下图显示了OMAP4460 SoC的 SRAM存储器布局:
OMAP4460上的SRAM存储器布局
SRAM
存储器是有限的(由于物理原因),因此我们只有48 KiB用于引导加载程序。通常,常规引导加载程序(例如U-Boot)二进制文件大于此值。
因此,我们需要创建一些额外的引导加载程序,它将初始化常规RAM并将常规引导加载程序从MMC复制到RAM,然后将跳转以执行该常规引导加载程序。这个额外的引导加载程序通常称为第一阶段引导加载程序(在两阶段引导加载程序方案中)。
所以这个第一阶段的引导加载程序是U-Boot SPL ; 和第二阶段的引导加载程序是常规的U-Boot(或适当的U-Boot)。需要说明的是:SPL代表二级程序加载器。这意味着ROM代码是加载(和执行)其他程序的第一件事,而SPL是加载(和执行)其他程序的第二件事。所以通常启动顺序是下一个:ROM code - > SPL - > u-boot - > kernel。实际上它与PC启动非常相似,它是:BIOS - > MBR - > GRUB - > kernel。
UPDATE
为了使事情完全清楚,这里是描述启动顺序的各个阶段表(明确使用术语可能的不确定性):
+--------+----------------+----------------+----------+
| Boot | Terminology #1 | Terminology #2 | Actual |
| stage | | | program |
| number | | | name |
+--------+----------------+----------------+----------+
| 1 | Primary | - | ROM code |
| | Program | | |
| | Loader | | |
| | | | |
| 2 | Secondary | 1st stage | u-boot |
| | Program | bootloader | SPL |
| | Loader (SPL) | | |
| | | | |
| 3 | - | 2nd stage | u-boot |
| | | bootloader | |
| | | | |
| 4 | - | - | kernel |
| | | | |
+--------+----------------+----------------+----------+
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
所以我只是使用bootloader作为U-Boot的同义词,而程序加载器作为加载其他程序的任何程序的通用术语。
参考:
what is the use of SPL (secondary program loader)
TPL: SPL loading SPL(and, SPL as just another U-Boot config)
文章来源: great.blog.csdn.net,作者:小麦大叔,版权归原作者所有,如需转载,请联系作者。
原文链接:great.blog.csdn.net/article/details/94429235
- 点赞
- 收藏
- 关注作者
评论(0)