围绕 UEFI 存在很多争议,但不管喜欢与否,它已成为通用台式机主板的唯一选择。一段时间以来,我一直在避免使用 UEFI 主板,但现在这变得相当困难,因为主板供应商推出的 UEFI 产品比 BIOS 产品具有更多功能(即支持更多 RAM)。考虑到这一点,我希望确保未来至少有一个开源选项,如果没有,我可以忍受功能较少但自由度更高。
TianoCore 是英特尔的 UEFI 接口开源实现,维基百科对此有这样的说法:
TianoCore 缺乏初始化芯片组功能的专用驱动程序,这些驱动程序由 Coreboot 提供,TianoCore 是其中的众多有效载荷选项之一。Coreboot 的开发需要芯片组制造商的合作,以提供开发初始化驱动程序所需的规范。
我的问题是,coreboot 提供的这些驱动程序是否仍然需要芯片组供应商提供的某种二进制 blob?此外,Ronald G. Minnich 表示关于 EFI:
对 IDE I/O 地址或特定内存地址的访问可能会被捕获到 EFI 代码中,并可能被检查、修改或中止。许多人认为这是构建“DRM BIOS”的努力。
在 TianoCore+coreboot 设置中,可能实现该目的的部件是否由硬件供应商提供开源或二进制固件?
答案1
TianoCore+coreboot 是真正的开源 UEFI 吗?
对于 Intel 平台(我曾为 Intel 主板做过开发,虽然我相信情况仍然一样,但我不能代表 AMD 发言),不是,因为 TianoCore 本身无法执行低级硬件初始化,需要 coreboot 首先执行此硬件初始化。但 coreboot 如何做到这一点?coreboot 调用特定的二进制 blob 来执行这些功能。这些二进制 blob(例如微代码更新、FSP 二进制文件、ME 二进制文件等)是如何生成的?您无法自己构建这些二进制文件,因为它们是 Intel 专有代码。充其量,您可以检索与您的平台相关的二进制文件,并将它们包含在 coreboot 构建过程中。除非您能够自由公开地修改这些二进制 blob 的源代码,否则您将不会拥有真正的开源 UEFI 或 coreboot。
我的问题是,coreboot 提供的这些驱动程序是否仍然需要来自芯片组供应商的某种二进制 blob?
是的
资料来源:
经验
coreboot 源代码
http://www.coreboot.org/TianoCore
英特尔固件支持包(FSP)
http://www.intel.com/content/www/us/en/intelligent-systems/intel-firmware-support-package/intel-fsp-overview.html
微码更新(通常由 BIOS 应用,但不一定如此。)
https://wiki.debian.org/Microcode
答案2
可以将 coreboot(进行早期硬件初始化)和 TianoCore(提供 UEFI API)组合成完整的 UEFI 固件实现。不过,这仍在开发中。它也不会是“规范的”UEFI,因为外层将是 coreboot。
一种基于 Duet 的方法可以在以下网址找到:http://notabs.org/coreboot/duet-payload/- 它可以在一定程度上在真实硬件上启动。
另一个(披露:我的项目)尝试重用更多 Tiano 并更接近 UEFI 架构,它在 github 上:https://github.com/pgeorgi/edk2/。这个还没有在真实硬件上进行过太多测试,只有 Qemu。
原则上,也可以采用 coreboot 代码并将其制作成 tianocore 包,这样它在各个方面看起来和感觉起来都像 UEFI(不仅仅是用户和操作系统可见的方面)。显然 coreboot 开发人员对此不太感兴趣。
答案3
芯片组初始化和其他极低级别的硬件特定代码一直以来都是闭源的。BIOS/UEFI 不会改变主板供应商很少披露内存控制器初始化等细节的事实。
要拥有真正的开源主板,您必须寻找开源硬件,即一些供应商公开主板上每个硬件组件的所有规格。至少可以说,这很难找到。