对于这三个问题我很困惑,不清楚自己的概念
为什么我们需要辅助程序加载器?
它被加载并重新定位到哪个内存中?
系统内存和RAM有什么区别?
据我通过阅读链接了解到的是.. 当系统内存无法完全容纳uboot时需要SPL,因此我们需要使用称为SPL的最小代码来初始化内存。 SPL实际上会重新定位还是只是uboot自己重新定位?
让我以OMAP平台为例进行解释(只是提供一些实际背景,而不仅仅是理论或常识)。 首先看一些事实:
所以这个第一阶段引导加载程序是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 |
| | | | |
+--------+----------------+----------------+----------+
所以我只是使用
作为U-Boot
的同义词,并使用 Program Loader 作为加载其他程序的任何程序的通用术语。 另请参阅: [1]
SPL(维基百科)其次,硬件启动过程可能限制太多。它可能期望引导加载程序位于没有足够空间来存储整个引导过程的特定位置。
内部 SoC sram 存储器从 4kB 增加到 512KB 或更多。 SPL 通常用作垫脚石,因为完整的 u-boot 无法装入内部 SRAM。但不仅如此。在某些情况下,可以用作SPL阶段进行DDR调优或其他需要。