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

时间:2015-07-06 11:36:47

标签: ubuntu linux-kernel operating-system kernel u-boot

我很难清除有关这三个问题的概念

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

  2. 在哪个内存中加载和重新定位?

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

2 个答案:

答案 0 :(得分:48)

让我以OMAP平台为例进行解释(仅提供一些实际背景而不仅仅是理论或常识)。 看看初学者的一些事实:

  • 在基于OMAP的平台上,开机后运行的第一个程序是ROM code(类似于PC上的BIOS)。
  • ROM代码查找引导加载程序(必须是名为“MLO”的文件,位于MMC的活动第一个分区,必须格式化为FAT12 / 16/32, - 但这是详细信息)
  • ROM代码将该“MLO”文件的内容复制到static RAM(因为常规RAM尚未初始化)。下图显示了OMAP4460 SoC的SRAM存储器布局:

SRAM memory layout on OMAP4460

  • SRAM内存有限(由于物理原因),因此我们只有48 KiB用于bootloader。通常,常规引导加载程序(例如U-Boot)二进制文件大于此值。因此,我们需要创建一些额外的引导加载程序,它将初始化常规RAM并将常规引导加载程序从MMC复制到RAM,然后将跳转以执行该常规引导加载程序。这个额外的引导加载程序通常称为第一阶段引导加载程序(在两阶段引导加载程序方案中)。

所以第一阶段引导加载程序 U-Boot SPL ;和第二阶段引导加载程序常规U-Boot (或正确的U-Boot )。需要说明的是:SPL代表 Secondary Program Loader 。这意味着ROM代码是加载(并执行)其他程序的第一件事,而SPL是加载(并执行)其他程序的第二件事。因此通常接下来是启动顺序:ROM代码 - > SPL - > u-boot - >核心。实际上它与PC启动非常相似,它是:BIOS - > MBR - > GRUB - >内核。

<强>更新

为了使绝对清楚,这里是描述启动顺序的所有阶段的表(以澄清所用术语的可能不确定性):

+--------+----------------+----------------+----------+
| 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   |
|        |                |                |          |
+--------+----------------+----------------+----------+

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

另见:

[1] SPL (at Wikipedia)

[2] TPL: SPL loading SPL - Denx

[3] Bootloader (at OSDev Wiki)

[4] Boot ROM vs Bootloader

答案 1 :(得分:1)

理论上不需要辅助程序加载器。但是,通常有一个实际的原因。两个在我的头顶。首先,模块化和易于开发。

其次,硬件启动过程可能过于严格。可能期望书籍加载器位于没有足够空间存储整个引导过程的特定位置。主加载程序执行加载完整书籍过程(SPL)所需的任何操作。例如,主加载程序可以存储在具有内存限制的ROM中。