我有兴趣投资支持 libreboot 的硬件,并且我知道它是 coreboot 的一个分支,删除了固件 blob,但是我不明白 seabios 是什么。
我做了一些研究,但是找不到(我所理解的)有关seabios 在这一切中到底处于什么位置的信息。据解释,seabios 是一个有效负载,但是操作系统内核(例如 Linux)也可以作为“有效负载”。当我尝试调整 Chromebook 时,我在 qemu 和 Purism 的产品上看到过提到seabios,但据我了解;使用 coreboot 时不需要 seabios。
seabios 是处于较高级别(如术语“有效负载”所示)还是处于较低级别(如名称“seabios”本身所示)。
我猜它类似于 Linux 中的开源视频驱动程序堆栈,其中有 GPU 固件 > 内核驱动程序 > 用户空间驱动程序/API 层(如 mesa、SDL...),然后是应用程序。
据我了解,Coreboot/Libreboot是硬件初始化程序,Seabios是加载引导加载程序(GRUB或ISOLINUX)的程序,它从那里开始,但细节我仍然不清楚。
我全职使用 GNU/Linux 已有十多年了,但我的知识仅限于 systemd 和 GRUB 脚本。直到现在才研究过 libre BIOS/UEFI 替代方案。
在承诺购买硬件之前,我非常感谢对此进行澄清(尽管支持的硬件列表非常有限)!
答案1
我不知道您正在寻找什么样的复杂答案,这是我的简单但冗长且轶事的尝试:
消费者一直在使用IBM PC 克隆许久。它们有一个用于平台初始化的固件,称为 BIOS,它在某些时候被逆向工程,以便 IBM 以外的其他制造商可以开始生产兼容的机器。其他计算机系统使用不同的固件,例如安腾,其中开发了 EFI,后来成为采用 Intel 处理器 (TianoCore) 的 Mac 和 PC 的新标准。 Coreboot 最初被命名为 LinuxBIOS,它试图删除大部分或全部(如果可能的话)专有代码来启动 Linux 内核,这也是最初的目标。在某些时候,当时该项目的成员认为,支持除了加载 Linux 内核之外的机制会更灵活。用 Coreboot 替换计算机的原始固件似乎很困难,即使对于 Linux 用户来说也是如此,如果你成功了,你将只能启动 Linux。在 Coreboot 上运行 Windows 可能不是大多数人的想法,但它已经它的利基市场。一个更好的例子是更熟悉 BSD 的用户。当然还有更多:Minix、Haiku 等等。如果您想启动其中任何一个,您必须选择一个“有效负载”来提供这些操作系统所需的接口。
进一步阅读和材料:
- 马修·加勒特:ACPI、内核和固件合约
- Depthcharge:Chrome 操作系统引导加载程序
- Chromium 项目网站上有一个漂亮而简单的图表,将 Chome OS 设备与 PC 进行比较,并解释了工程师从启动过程中删除的内容以实现较短的启动时间。不幸的是我现在找不到。
我不是固件工程师,也不参与任何这些项目,也不参与任何项目。我只是一个拥有十多年 Linux 经验的人。
如果您想询问工程师,可以在 Reddit 上询问 MrChromebook 或在相应的邮件列表中询问。
答案2
普通 BIOS 的作用不仅仅是设置硬件,它还实现了大量可由 16 位实模式代码调用的函数,以执行各种低级操作并检索有关系统的低级信息。 BIOS 可以提供这种低级功能,因为您的 BIOS 设计水平非常低(毕竟它会初始化您的系统)并且必须非常熟悉您的平台(芯片组和其他硬件)。
例如,BIOS 提供了一个 e820 函数,可用于检索系统物理内存映射,因为 BIOS 在初始化期间通过对芯片组寄存器进行编程来设置该内存映射。
您可以在下表中查看 BIOS 提供的这些标准功能的完整列表:https://en.wikipedia.org/wiki/BIOS_interrupt_call
Coreboot 不提供此功能,因为 Coreboot 不是 BIOS。 Coreboot 没有“输入输出系统”。它只是初始化您的系统并运行您的有效负载。如果您需要 BIOS 接口,则必须使用 SeaBIOS 作为负载。
避免 BIOS 接口与 Linux 一起工作,因为 Linux 无论如何都不依赖 BIOS 功能,它有自己的例程来处理硬件,而不会影响 BIOS。有些事情,比如获取物理内存映射,仍然是需要的,因此 Coreboot 将此信息作为 Linux 引导协议的一部分在 Linux 标头中传递给 Linux 内核:https://github.com/coreboot/coreboot/blob/7128063ecc8099932a4bef8d2e28101b7f652804/util/cbfstool/linux.h
Coreboot 不是 BIOS。它存在于与 BIOS 和 UEFI 不同的类别中。如果您的有效负载需要 BIOS,它将无法工作。您需要进入 Coreboot->SeaBIOS->无论您想要启动什么。
希望这可以帮助。