什么是SPL(二级程序加载器)的用途

the*_*dal 22 ubuntu operating-system kernel linux-kernel u-boot

我很清楚我对这三个问题的概念

  1. 为什么我们需要一个辅助程序加载器?

  2. 它被加载和重新定位的内存?

  3. 系统内部存储器和RAM有什么区别?

据我所知,通过读取链接是.. 当系统内部存储器无法完全保存uboot时需要SPL,因此我们需要使用称为SPL的最小代码来初始化内存.SPL是否真的需要重新定位,或者只是uboot与之相关?

Sam*_*nko 54

让我以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代码 - > SPL - > u-boot - >内核.实际上它与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   |
|        |                |                |          |
+--------+----------------+----------------+----------+
Run Code Online (Sandbox Code Playgroud)

所以我只是使用bootloader作为U-Boot的同义词,而程序加载器作为加载其他程序的任何程序的通用术语.

也可以看看:

[1] SPL(维基百科)

[2] TPL:SPL加载SPL - Denx

[3] Bootloader(在OSDev Wiki上)

[4] Boot ROM与Bootloader