我很难清除有关这三个问题的概念
为什么我们需要一个辅助程序加载器?
在哪个内存中加载和重新定位?
据我所知,通过读取链接是.. 当系统内部存储器无法完全保存uboot时需要SPL,因此我们需要使用称为SPL 的最小代码来初始化内存。 SPL是否真的需要重新定位,或者它只是与自己相关的uboot?
答案 0 :(得分:48)
让我以OMAP平台为例进行解释(仅提供一些实际背景而不仅仅是理论或常识)。 看看初学者的一些事实:
所以第一阶段引导加载程序是 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 作为任何加载其他程序的常用术语程序
另见:
[2] TPL: SPL loading SPL - Denx
答案 1 :(得分:1)
理论上不需要辅助程序加载器。但是,通常有一个实际的原因。两个在我的头顶。首先,模块化和易于开发。
其次,硬件启动过程可能过于严格。可能期望书籍加载器位于没有足够空间存储整个引导过程的特定位置。主加载程序执行加载完整书籍过程(SPL)所需的任何操作。例如,主加载程序可以存储在具有内存限制的ROM中。