U-Boot 与 UEFI 固件之间的区别

U-Boot 与 UEFI 固件之间的区别

我正在读一本书(《精通嵌入式 Linux 编程》,第二版)。在有关引导加载程序的章节中,它解释了使用 U-Boot 和 UEFI 固件的引导过程。

看起来启动步骤完全相同,不同之处在于最后一步是 U-Boot 或 UEFI 固件接管并在 RAM 中加载 Linux 映像。

那么具体的区别是什么呢?为什么人们会选择 U-Boot 而不是 UEFI,反之亦然?

答案1

UEFI 规范描述固件可能公开的 API。此 API 可供固件加载的应用程序和驱动程序使用。

开源固件U-Boot包含 UEFI 规范的部分实现。完整的开源实现由TianoCore 血管紧张素Ⅱ. 像凤凰提供闭源 UEFI 固件。

在 64 位 ARM 架构上,Linux 发行版苏塞Fedora 使用 U-Boot 将 GRUB 作为 UEFI 应用程序从 U-Boot 加载,然后通过 UEFI API 调用加载并启动 Linux 内核。Linux 本身有一个 UEFI 存根,因此可以作为 UEFI 应用程序启动。

UEFI 规范定义了一个运行时,该运行时会一直保留在内存中,直到系统重新启动。UEFI 运行时提供的服务包括更改 UEFI 变量、上传新固件和重新启动系统。符合 UEFI 规范的 U-Boot 还包含一个 UEFI 运行时。但截至目前,该功能仅限于重新启动系统。

答案2

最大的区别在于 UEFI 本质上是一个操作系统,而 U-Boot 只是一个引导加载程序。U-Boot 的功能足以使系统可引导,并提供一些额外功能来简化引导问题的调试。另一方面,UEFI 提供了大量运行时 API,相比之下,MS-DOS 似乎很简单,而且与 U-Boot(一旦移交执行,它基本上就不会再妨碍您)不同,UEFI 会一直存在。

除此之外,还有许可差异(U-Boot 比 UEFI 更开放)、文件格式差异(U-Boot 使用自定义的、简约的图像文件格式,UEFI 使用 PE32+ 可执行文件),以及执行交接时系统实际状态和配置方式的差异(UEFI 通常具有集成固件配置选项,而 U-Boot 通常需要重建固件并重新刷新)。

相关内容