android - 第二阶段引导加载程序需要什么?为什么不同的引导加载程序如第一阶段和第二阶段?

标签 android linux linux-kernel embedded-linux bootloader

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

为什么我们不能只有一个引导加载程序,我们可以在其中闪存单个镜像来初始化硬件?只有一个阶段的引导加载程序直接加载内核镜像会有什么缺点? 为了更清楚地使用 ARM CORTEX A8 for beagle bone black,我将 MLO、U 引导和内核镜像放在引导部分中,据我所知,第一阶段引导加载程序初始化外部 RAM,其中 U-boot 被复制,它初始化了更多的外围设备,为什么我不能直接获取内核镜像而不是第二阶段引导加载程序

最佳答案

可能有几个原因。

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

例如,您可能希望从文件系统加载操作系统。处理文件系统的代码可能不适合您的第一个引导加载程序,但加载第二个引导加载程序的代码却适合。您可以将所有文件系统代码放在第二个引导加载程序中,这样您就可以更灵活地让第一个引导加载程序加载它。

另一个原因可能是引导加载程序的可升级性。引导加载程序并不完美,可能存在错误。您可以将第一个引导加载程序配置为加载第二个引导加载程序和一些恢复实用程序。然后你可以把第一个引导加载程序放到 ROM 上,再也不用碰它了。如果发现错误,只需升级第二阶段引导加载程序即可。如果您使系统变砖,您仍然拥有用于恢复的第一个引导加载程序。

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

关于android - 第二阶段引导加载程序需要什么?为什么不同的引导加载程序如第一阶段和第二阶段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455153/

相关文章:

java - Android:以编程方式添加 TextInputLayout

android - 相机预览仍然是黑色

linux - 如何执行特定于文件的命令?

linux - 为什么在 Linux 中一切都被视为文件?

linux-kernel - 如何删除失败的内核模块

android - 通过应用内计费解锁试用应用程序

android - KeyCode_Enter 到 ListView 中的下一个 EditText

linux - 列出进程以有效方式访问的所有文件

c++ - 如何在没有 root 权限的情况下更改 Linux 系统时间?

linux - 在 bash 关联数组中使用变量作为键