第二阶段引导加载程序的需求是什么?为什么不同的bootloader喜欢第一阶段和第二阶段?

时间:2014-03-17 13:08:58

标签: android linux linux-kernel embedded-linux bootloader

我知道第一阶段引导加载程序将进行基本的硬件初始化,并像u-boot一样调用第二阶段引导加载程序。但我仍然不明白为什么我们需要多个阶段的启动加载器。

为什么我们只能有一个启动加载器,我们在哪里刷一个图像来初始化硬件?只有一个阶段的引导加载程序直接加载内核映像会有什么缺点? 为了让我更清楚使用ARM CORTEX A8 for beagle bone black我将MLO,U启动和内核映像放在启动部分中,据我所知,第一阶段启动加载程序初始化你的外部RAM,其中U-boot被复制,它初始化了一些外围设备,为什么我不能直接拿起内核映像而不是第二阶段启动加载器

4 个答案:

答案 0 :(得分:4)

请记住,bootloader和bootsectors的大小只有512个字节。如果引导加载程序在相同的512字节内直接执行内核,则称为单阶段引导加载程序。

然而,问题在于它的大小。这512字节内的空间很小。在16位引导加载程序中设置,加载和执行32位内核将是非常困难的。这不包括错误处理代码。这包括以下代码:加载和查找32位内核,执行内核和错误处理。在512字节内安装所有这些代码是不可能的。因此,单阶段引导加载程序必须加载并执行16位内核。

多级Bootloader由一个512字节的引导加载程序(单级加载器)组成,但它只加载并执行另一个加载器 - 第二阶段引导加载程序。第二阶段Bootloader通常为16位,但它将包括所有代码(在上一节中列出)等等。它将能够加载和执行32位内核。

这是有效的原因是因为唯一的512字节限制是引导加载程序。只要引导加载程序以良好的方式加载第二级加载器的所有扇区,第二级加载器的大小就没有限制。这使得为​​内核设置更加容易。

因为首次启动加载程序初始化所需的MEMORY,硬件和一些外部设备,所以时间不受MEMORY>>>

的限制

答案 1 :(得分:2)

可能有几个原因。

也许您的平台对引导加载程序的大小有限制?这是时间和灵活性之间的权衡。您需要一个非常基本的引导加载程序来加载更复杂的引导加载程序。

例如,您可能希望从文件系统加载操作系统。处理文件系统的代码可能不适合您的第一个引导加载程序,但加载第二个引导加载程序的代码确实适合。您可以将所有文件系统代码放在第二个引导加载程序中,在那里您可以更灵活地使用第一个引导加载程序来加载它。

另一个原因可能是引导加载程序的可升级性。 Bootloader并不完美,可能存在错误。您可以将第一个引导加载程序配置为加载第二个引导加载程序,也可以加载一些恢复实用程序。然后你可以将第一个引导加载程序放到ROM上,再也不要再触摸它。如果发现错误,可以升级第二阶段引导加载程序。如果你搞砸了你的系统,你仍然有第一个用于恢复的引导加载程序。

如果您愿意,这也可以让您在以后的第二个引导加载程序中包含新功能。

答案 2 :(得分:2)

1)这512字节表示启动时内存第一扇区的限制,这与PC桌面系统有关。

2)在嵌入式系统中另一个概念是多级bootloader,在这个如果板上有NO-FLASH存储器那么我们必须从不同的设备启动到rootfile系统,内核映像可能在SD卡上,USB-pendrive,在网络或其他外部设备上,在这种情况下,x-loader(第一个引导加载程序仅检测图像和主要初始化的位置以及最多2个引导加载程序(u-boot)它将从不同的资源获取图像)

答案 3 :(得分:0)

对于Beaglebone Black中使用的AM3359,第一阶段实际上是由内部64KiB引导ROM执行的。根据从SYSBOOT配置位读取的值,它将尝试从各种可能的源加载MLO并开始执行它 - 请参阅AM335x Technical Reference Manual的第26章。

从这一点来说,如果您不想使用事实上的标准u-boot引导加载程序,那么没有什么能阻止您编写自己的等效MLO / u-boot-spl来初始化SDRAM并加载内核,前提是代码和数据都适合内部128KiB SRAM。

这可以通过重新使用最少量的u-boot代码来完成,或者如果这仍然是代码太多,可以通过使用AM3359 Starterware库在C语言中编写函数等效代码来完成,或者最终在ARM汇编代码中,如果需要的话。

使用thumb2指令集有助于进一步减小此引导加载程序的大小。

但是因为这需要很多时间,大多数人发现重用优秀的u-boot引导程序更方便,即使它必须分成MLO / u-boot-spl和u-boot部分以便可用于AM3359及其128KiB内部SRAM。

总之,你是对的,在Beaglebone Black上进行三阶段启动过程(启动ROM + MLO + u-boot)不是技术限制 - 如果可以的话,两个(启动ROM + MLO)就足够了提供不重复使用现有的,经过验证的,免费且广泛使用的引导加载程序代码的奢侈品。