为什么我的 uefi 固件忽略启动顺序?

为什么我的 uefi 固件忽略启动顺序?

我的 Toshiba Tecra R950 基本支持 UEFI。它有一个老式的基于文本的蓝色固件设置系统,它称之为“BIOS”,而不是大多数合适的 UEFI 系统所具有的花哨的图形设置。启动顺序菜单(在设置中或在启动时按 F12 调出)不允许选择操作系统,只能选择设备。除非 efi 分区包含后备加载程序,否则系统似乎无法启动/efi/boot/bootx64.efi- 尽管根据我所读的内容,这应该只对可移动卷是必要的。

Linuxefibootmgr工具可用于访问或修改实际的 efi 启动优先级(即首先加载哪个操作系统),但固件在启动时会忽略您在此处设置的任何内容,而是依赖于 BIOS/固件设置中设置的硬件优先级,并使用第一个可访问卷上的后备加载程序。唯一的例外似乎是从 S4(休眠)恢复时,它会突然查看此列表并启动那里的顶级加载程序,而不是后备加载程序。

这是否只是 UEFI 实施不当的一个案例?是否有可能使用仅对 UEFI 功能提供有限支持的混合 BIOS/UEFI?由于我的系统似乎知道如何处理从 S4 恢复时的启动优先级,我有什么办法可以让它正常工作?

答案1

简短回答:根据您的描述,我认为您的固件有缺陷。

详细回答:首先,EFI(或 UEFI,即 EFI 2.x)规范规定没有什么关于用户界面。因此,您可以构建一个纯文本模式的 EFI 用户界面,该界面仍然 100% 符合 EFI/UEFI 规范。BIOS 没有官方规范,但曾有人尝试为 BIOS 提供图形设置实用程序。因此,您不应使用图形设置实用程序或缺少图形设置实用程序来指示某物是 EFI 还是 BIOS,或者指示实现的“完整性”。视觉效果与要点和您的问题完全无关。

顺便提一下,许多制造商将其 EFI 称为 BIOS。恕我直言,这是不好的做法,因为它会让用户混淆传统 16 位 BIOS 与现代 32 位或 64 位 EFI 之间的区别,而 BIOS 是非常在最重要的细节上有所不同。

话虽如此,EFI 规范非常明确地规定,应遵守启动顺序变量(在 Linux 中设置efibootmgr)。如果您的固件忽略了这些变量,则违反了规范。不幸的是,这种违规行为仍然非常普遍,尽管几年前它们更为常见。快速谷歌搜索表明您的型号可能是在 2012 年推出的,因此它有一个旧的和有缺陷的 EFI 可能并不奇怪。您可能需要查看东芝的网站,看看是否有可用的固件更新。这可能会或可能不会修复任何问题,但绝对值得一试。

您也可以尝试使用其他工具efibootmgr,例如简易UEFI在 Windows 或bcfg在 EFI shell 中。理论上,任何这些工具都可以完成这项工作。在实践中,我观察到有时efibootmgr当其他工具可以工作时,这种方法会失败。

至于“混合 BIOS/UEFI”,确实存在这样的情况。我知道有两大类:

  • BIOS 之上的 EFI-- EFI 规范未涵盖一些最低级别的硬件初始化功能。为了处理此任务,一些早期的 x86/x86-64 EFI,例如技嘉的混合 EFI,使用传统的 BIOS,将 EFI 置于其“上方”。我的一次经历(在链接中描述)很痛苦,但这可能与实现有关,而不是与一般方法有关。据我所知,这种方法已被放弃,取而代之的是其他硬件初始化代码,这些代码可以更好地与其上方的 EFI 交互。
  • EFI 锁定在 CSM-- 兼容性支持模块 (CSM) 是一个可选的 EFI 功能,它使 EFI 能够启动旧的 BIOS 模式引导加载程序。我听说,在过去几年基于 BIOS 的计算机中,一些“BIOS”实际上使用了永久启用了 CSM 的 EFI。这样的计算机无法以正常的 EFI 方式启动,它们看起来就像普通的基于 BIOS 的计算机一样。不过,我不知道这种做法有多普遍,事实上,我从未证实过这种说法是否属实——这可能是一个都市传说。这样的设置肯定是理论上无论这样的固件是否真的被编写过,这都是可能的。

这两种方法都无法解释您的问题,似乎最好将其描述为严重损坏的 EFI。

相关内容