我正在读一本书(掌握嵌入式 Linux 编程,第二版)。在引导加载程序一章中,它解释了使用 U-Boot 和 UEFI 固件的引导过程。
看起来启动步骤完全相同,只是在最后一步 U-Boot 或 UEFI 固件接管并将 Linux 映像加载到 RAM 中。
那么具体的区别是什么?为什么会选择 U-Boot 而不是 UEFI,反之亦然?
小智 11
在UEFI规范描述了一个API,固件可能会暴露。此 API 可由固件加载的应用程序和驱动程序使用。
开源固件Das U-Boot包含 UEFI 规范的部分实现。TianoCore EDK II提供了一个完整的开源实现。Phoenix 等公司提供闭源 UEFI 固件。
在 64 位 ARM 架构上,Linux 发行版Suse和 Fedora 使用 U-Boot 将 GRUB 作为 UEFI 应用程序从 U-Boot 加载,然后通过 UEFI API 调用加载和启动 Linux 内核。Linux 本身有一个 UEFI 存根,因此它可以作为 UEFI 应用程序启动。
UEFI 规范定义了一个运行时,该运行时保留在内存中,直到系统重新启动。UEFI 运行时提供的服务包括更改 UEFI 变量、上传新固件和重新启动系统。符合 UEFI 规范 U-Boot 还包含 UEFI 运行时。但截至今天,该功能仅限于重新启动系统。
最大的区别在于UEFI本质上是一个操作系统,而U-Boot只是一个引导加载程序。U-Boot 的作用足以使系统可引导,并提供了一些额外的功能来简化引导问题的调试。另一方面,UEFI 提供了大量运行时 API,相比之下,MS-DOS 看起来很简单,并且与 U-Boot 不同,U-Boot 一旦移交执行就基本上不再妨碍您,UEFI 会一直存在。
除此之外,还存在许可差异(U-Boot 比 UEFI 更开放)、文件格式差异(U-Boot 使用自定义的简约图像文件格式,UEFI 使用 PE32+ 可执行文件)以及实际状态的差异执行切换时的系统以及配置方式(UEFI 通常具有集成的固件配置选项,而 U-Boot 通常需要重建固件并重新刷新)。
归档时间: |
|
查看次数: |
5069 次 |
最近记录: |