我对以下三个问题的概念不清楚:
为什么我们需要一个次级程序加载器?
它加载和重定位到哪个内存中?
系统内部内存和RAM之间有什么区别?
通过阅读链接,我了解到当系统内部内存无法完全容纳uboot时,需要使用称为SPL的最小代码片段初始化内存。 SPL实际上是否会重新定位,还是只有uboot会重新定位本身?
我对以下三个问题的概念不清楚:
为什么我们需要一个次级程序加载器?
它加载和重定位到哪个内存中?
系统内部内存和RAM之间有什么区别?
通过阅读链接,我了解到当系统内部内存无法完全容纳uboot时,需要使用称为SPL的最小代码片段初始化内存。 SPL实际上是否会重新定位,还是只有uboot会重新定位本身?
所以这个第一阶段引导加载程序就是U-Boot SPL;而第二阶段引导加载程序则是常规U-Boot(或U-Boot proper)。需要明确的是: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 的同义词,而将程序加载器用作加载其他程序的任何程序的通用术语。
另请参阅:
[1] SPL(在维基百科上)
[4] 引导ROM与引导加载程序
没有理论上需要一个次级程序加载器(SPL)。然而,通常有实际的原因需要它。我能想到两个。
主要的加载器会执行所有必要的操作来加载完整的引导过程(SPL)。例如,主要的加载器可以存储在具有内存限制的ROM中。