当前位置: 首页>>技术教程>>正文


ubuntu – SPL(辅助程序加载器)有什么用

, , , ,

问题描述

我很困惑清除关于这三个问题的概念

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

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

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

据我了解,通过阅读链接是..当系统内部内存无法完全容纳uboot时,需要SPL,因此我们需要使用称为SPL的最小代码初始化内存。是SPL实际迁移还是仅与自身相关的uboot?

最佳思路

让我以OMAP平台为例进行说明(仅提供一些实际背景,而不仅仅是理论或常识)。看一下入门的一些事实:

  • 在基于OMAP的平台上,在power-on之后运行的第一个程序是ROM code(类似于PC上的BIOS)。

  • ROM代码查找引导加载程序(引导加载程序必须是名为”MLO”的文件,并且位于MMC的活动第一个分区上,该文件的格式必须为FAT12 /16/32,但这是详细信息)

  • ROM代码将该”MLO”文件的内容复制到static RAM(因为常规RAM尚未初始化)。下图显示了OMAP4460 SoC的SRAM存储器布局:

  • SRAM内存有限(由于物理原因),因此引导加载程序我们只有48 KiB。通常,常规的引导加载程序(例如U-Boot)二进制文件会更大。因此,我们需要创建一些其他的引导程序,这些引导程序将初始化常规的RAM并将常规的引导程序从MMC复制到RAM,然后跳转到执行该常规的引导程序。此附加的引导加载程序通常称为first-stage引导加载程序(在two-stage引导加载程序方案中)。

因此,此first-stage引导程序为U-Boot SPL;并且second-stage引导程序是常规的U-Boot(或U-Boot适当)。需要明确的是:SPL代表次要程序加载程序。这意味着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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8217.html,未经允许,请勿转载。