gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:48 24 4
gpt4 key购买 nike

我对这三个问题的概念很迷茫

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

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

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

据我通过阅读链接了解到的是.. 当系统内部存储器不能完全容纳 uboot 时需要 SPL,因此我们需要使用称为 SPL 的最小代码片段初始化内存。 SPL 是真的搬迁还是只是 uboot 自己搬迁?

最佳答案

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

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

SRAM memory layout on OMAP4460

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

所以这个第一阶段 Bootstrap U-Boot SPL第二阶段引导加载程序常规U-Boot(或U-Boot proper)。明确一点:SPL 代表辅助程序加载器。这意味着 ROM 代码是加载(和执行)其他程序的第一件事,而 SPL 是加载(和执行)其他程序的第二件事。所以通常引导顺序是:ROM code -> SPL -> u-boot -> kernel。实际上它与 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 - SPL(二级程序加载器)有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31244862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com