ubuntu SPL(Secondary Program Loader)

yrwegjxp  于 2023-10-17  发布在  其他
关注(0)|答案(3)|浏览(112)

我对这三个问题的概念很困惑
1.为什么我们需要一个辅助程序加载器?
1.在哪个内存中加载和重定位?
1.系统内存和RAM有什么区别?
据我所知,通过阅读链接是..当系统内部内存无法完全容纳uboot时,需要SPL,因此我们需要使用称为SPL的最小代码片段初始化内存。SPL实际上是重新定位还是只是重新定位自己的uboot?

ffscu2ro

ffscu2ro1#

让我以OMAP平台为例来解释它(只是提供一些实际背景,而不仅仅是理论或常识)。先来看看一些事实:

  • 在基于OMAP的平台上,上电后运行的第一个程序是ROM代码(类似于PC上的BIOS)。
  • ROM代码寻找 Bootstrap (这必须是一个名为“MLO”的文件,位于MMC的第一个分区上,必须格式化为FAT 12/16/32,--但这是细节)
  • ROM代码将该“MLO”文件的内容复制到static RAM(因为常规RAM尚未初始化)。下图显示OMAP 4460 SoC的SRAM内存布局:

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

所以这个 * 第一阶段 Bootstrap * 就是U-Boot SPL;而 * second stage bootloader* 是regular U-Boot(或U-Boot proper)。要澄清的是:SPL是Secondary Program Loader的缩写。这意味着ROM代码是加载(和执行)其他程序的第一件事,SPL是加载(和执行)其他程序的第二件事。所以通常 Boot 序列是下一个:ROM代码-> SPL -> u-boot -> kernel。实际上,它与PC Boot 非常相似,即:BIOS -> MBR -> GRUB -> kernel。

更新

为了使事情 * 绝对 * 清楚,这里是描述 Boot 序列的所有阶段的表(以澄清所用术语中可能的不确定性):

+--------+----------------+----------------+----------+
| 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(维基百科)
[2][TPL: SPL loading SPL - Denx](http://www.denx.de/wiki/pub/U-Boot/MiniSummitELCE2013/tpl-presentation.pdf)
[3][Bootloader (at OSDev Wiki)](http://wiki.osdev.org/Bootloader)
[4][Boot ROM vs Bootloader](https://stackoverflow.com/questions/15665052/what-is-the-difference-between-a-bootrom-vs-bootloader-on-arm-systems)

cygmwpex

cygmwpex2#

理论上不需要辅助程序加载器(SPL)。然而,通常有一些实用的理由。两个从我的头顶。

  • 首先,模块化和易于开发。
  • 第二,硬件 Boot 过程可能限制太多。它可能期望引导加载程序位于没有足够空间存储整个引导过程的特定位置。

主加载程序执行加载完整 Boot 进程(SPL)所需的任何操作。例如,主加载器可以存储在具有存储器限制的ROM中。

tnkciper

tnkciper3#

内部SoC sram内存从4kB到512 KB,有时甚至更多。SPL通常被用作垫脚石,因为完整的u-boot不能适应内部SRAM。但不仅如此。在某些情况下,可用于在SPL阶段执行DDR调谐或其他需要。
内部RAM内存是静态RAM。外部通常是socket,需要初始化,所以不能在socket/DDR控制器初始化之前使用。
请注意,XIP也存在,即并行或非芯片,其中通常不需要SPL,即使是小的内部SRAM,因为可以从XIP闪存执行初始化sSRAM。

相关问题