SPL(二级程序加载器)有什么用

问题描述 投票:0回答:3

对于这三个问题我很困惑,不清楚自己的概念

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

  2. 它被加载并重新定位到哪个内存中?

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

据我通过阅读链接了解到的是.. 当系统内存无法完全容纳uboot时需要SPL,因此我们需要使用称为SPL的最小代码来初始化内存。 SPL实际上会重新定位还是只是uboot自己重新定位?

ubuntu linux-kernel operating-system kernel u-boot
3个回答
122
投票

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

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

SRAM memory layout on OMAP4460

  • 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。 更新

为了让事情绝对清楚,这里有一个描述启动顺序所有阶段的表格(以澄清所使用的术语中可能存在的不确定性):

+--------+----------------+----------------+----------+ | 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 加载 SPL - Denx

[3] 引导加载程序(位于 OSDev Wiki)

[4] Boot ROM 与 Bootloader

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


1
投票
首先,模块化和易于开发。

其次,硬件启动过程可能限制太多。它可能期望引导加载程序位于没有足够空间来存储整个引导过程的特定位置。
  • 主加载程序执行加载完整启动过程 (SPL) 所需的一切操作。例如,主加载程序可能存储在具有内存限制的 ROM 中。

内部 SoC sram 存储器从 4kB 增加到 512KB 或更多。 SPL 通常用作垫脚石,因为完整的 u-boot 无法装入内部 SRAM。但不仅如此。在某些情况下,可以用作SPL阶段进行DDR调优或其他需要。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.