是否有命令或方法(RTFM 除外)来确定系统是否具有 UEFI BIOS?

是否有命令或方法(RTFM 除外)来确定系统是否具有 UEFI BIOS?

我问这个问题的灵感是这另一个问题询问 Ubuntu

我问的原因之一是我只是好奇。我想更多地了解这一点,无论它在未来可能有什么价值。

但我也想知道,这样当我想知道WTF用户及其系统可能出现问题时,我可以要求用户执行一个程序。 ;-)

最初我想知道这些信息是否可以通过诸如(或类似)之类的工具检测和报告dmidecode。但是当 aUEFI BIOS模拟 a时会发生什么pre-UEFI BIOS

我预计随着时间的推移这个问题只会变得更加有趣。看来每个主要操作系统背后的公司都会坚持通过EFI相同的事情只是不同”。<sigh/>

答案1

系统可以拥有 UEFI 固件,但仍以传统 BIOS 模式启动操作系统。在这种情况下,启动的操作系统无法确定硬件是否确实支持 UEFI,因为 BIOS 不向前兼容 UEFI。

如果有任何与 UEFI 相关的内容,您仍然可以查看固件接口,但这是特定于供应商的并且不一致。所以那边也没有明确的答案。

证明 x86(_64) 内核是从 UEFI 启动的规范方法:

    $ dmesg | grep 'EFI v'
    [    0.000000] efi: EFI v2.31 by EDK II

内核将在以下位置打印这样的消息主要入口点EFI启动。内核通过 UEFI 启动当且仅当存在这样的消息。

其他信息性内容:

    $ dmesg | grep 'efi: mem'
    [    0.000000] efi: mem00: type=7, attr=0xf, range=[0x0000000000000000-0x00000000000a0000) (0MB)
    ...

这是从 EFI 固件传递到内核的内存映射。

    $ ls -F /sys/firmware/efi
    efivars/  systab  vars/

这些是与 EFI 相关的内核 ABI。efivars(3.8+) 并且vars是 EFI NVRAM 的内核 ABI,因此您可以使用它们更改启动选项。

但缺乏这些线索并不能证明该系统只是BIOS。

根据经验,最近的笔记本电脑都具有 UEFI 固件。最新的服务器正在迁移到 UEFI 固件。

编辑:rEFInd 的作者有更彻底的解释。步骤是一样的。

此外,Ubuntu 的固件测试套件可能会检测您的 UEFI 固件是否具有旧版 BIOS 的兼容性功能。虽然它没有解决在 BIOS 模式下检测支持 UEFI 的固件启动的问题。

答案2

当您进入“BIOS”(实际上是 EFI)时,可启动项列表中的一项应该是EFI启动提示,如果是UEFI系统。这有时称为 EFI shell。它很像 Unix 命令提示符的精简版本。通常您不希望它出现在启动列表中,但它在初始设置和故障排除过程中可能很有用。

我认为 UEFI 系统可以在没有该功能的情况下制作,但是您将放弃很多 EFI 的要素,嗯,EFI 这样做。

相关内容