Pra*_*p G 4 linux android linux-kernel embedded-linux bootloader
我知道第一阶段的引导加载程序将进行基本的硬件初始化,并像u-boot一样调用第二阶段的引导加载程序。但是我仍然不明白为什么我们需要多个阶段的引导加载程序。
为什么我们不能只有一个引导加载程序,我们在其中刷新单个映像来初始化硬件?仅一步引导加载程序直接加载内核映像会有什么不利之处?为了更清楚地说明,我将ARM CORTEX A8用于beagle骨黑,我将MLO,U引导和内核映像放置在引导部分中,据我所知,第一阶段引导加载程序会初始化您的外部RAM,复制U引导,这初始化了更多的外围设备,为什么我不能直接选择内核映像而不是第二阶段的引导加载程序
可能有几个原因。
也许您的平台对引导加载程序的大小有大小限制?这是时间和灵活性之间的权衡。您需要一个非常基本的引导加载程序来加载更复杂的引导加载程序。
例如,您可能想从文件系统加载操作系统。处理文件系统的代码可能不适合您的第一个引导加载程序,但加载第二个引导加载程序的代码确实适合。您可以将所有文件系统代码放在第二个引导加载程序中,这样您就具有更大的灵活性,并让第一个引导加载程序加载它。
另一个原因可能是引导加载程序的可升级性。引导加载程序并不完美,可能存在错误。您可以将第一个引导加载程序配置为加载第二个引导加载程序,也许还有一些恢复实用程序。然后你可以将第一个引导加载程序放入 ROM 中,并且再也不会碰它。如果发现错误,只需升级第二阶段引导加载程序即可。如果您的系统变砖,您仍然可以使用第一个引导加载程序进行恢复。
如果您愿意,这还可以让您稍后将新功能添加到第二个引导加载程序中。
请记住,引导加载程序和引导扇区的大小仅为512字节。如果在相同的512字节之内的引导程序直接执行了内核,则称为单级引导程序。
但是,问题在于它的大小。在这512个字节内,没有太多空间可以做很多事情了。在16位引导加载程序中设置,加载和执行32位内核非常困难。这不包括错误处理代码。其中包括以下代码:加载和查找32位内核,执行内核以及错误处理。不可能将所有这些代码装入512字节以内。因此,单级引导加载程序必须加载并执行16位内核。
多级引导加载程序由一个512字节的引导加载程序(“单级加载程序”)组成,但是它只是加载并执行另一个加载程序-第二级引导加载程序。第二阶段Bootloader通常为16位,但是它将包括所有代码(在上一节中列出)以及更多代码。它将能够加载和执行32位内核。
之所以起作用,是因为唯一的512字节限制是引导加载程序。只要引导加载程序以良好的方式加载第二级加载程序的所有扇区,第二级加载程序的大小就没有限制。这使得为内核设置事情变得更加容易。
因为首次引导加载程序会初始化所需的MEMORY,硬件和某些外部设备,因此时间不受MEMORY的限制>>>
| 归档时间: |
|
| 查看次数: |
5132 次 |
| 最近记录: |