在 Windows/Linux 中修改 UEFI 变量的工具?

在 Windows/Linux 中修改 UEFI 变量的工具?

我有一台 DELL 机器,使用 Phoenix SecureCore Tiano 作为其 UEFI/BIOS,但是,它完全不可配置,因为它的 UEFI shell 和菜单隐藏在 BIOS 设置中。

我想知道是否有可以在用户模式下修改 UEFI 设置(例如启动项)的工具?例如 Linux 中的“efibootmgr”。

顺便说一句,因为它是不可配置的,我认为启动过程处于传统模式,也就是说操作系统无法检测到 UEFI 的存在,对吗?

因此,这就是悖论:我必须以非传统模式启动才能启用 UEFI 工具在用户模式下修改启动项?但我必须先启用 UEFI 工具来修改启动项才能启用非传统启动?

答案1

EFI 实现必须提供某种方法来控制启动模式(EFI 与 BIOS),当然,不支持 BIOS 的 EFI 实现除外。然而,固件往往很少或根本不给用户明确的控制权;相反,固件会尝试根据硬盘的状态推断正确的启动模式 - 例如,如果检测到 GPT,它可能会使用 EFI 模式,如果发现 MBR,它可能会使用 BIOS 模式;或者,如果发现 EFI 系统分区 (ESP),它可能会使用 EFI 模式,如果没有,它可能会使用 BIOS 模式。通过阅读手册,您可能能够找到有关固件正在做什么的线索。如果没有,您就只能进行实验了。

启动可移动媒体时,规则可能有所不同,但通常只需提供一种启动模式即可将其推向正确的方向。这可能需要重新制作 CD 或(更简单的)仔细选择 CD。如果您尝试强制使用 EFI 模式启动,我的重新索引,特别是它的可启动 CD 版本,可能会有所帮助;它仅在 EFI 模式下启动,并且根据配置,它将充当其他基于 EFI 的启动的启动管理器,但不适用于 BIOS 模式启动。

答案2

我刚买了一台戴尔 XPS 17 (l702x),对多启动各种操作系统很感兴趣。如果我理解的没错,戴尔有某种锁定的 Phoenix SecureCore Tiano UEFI“BIOS”。据我所知,UEFI 不能直接使用(可能通过隐藏菜单等,这可能需要 BIOS 修改)。

似乎可以使用/访问与 Phoenix 兼容的 EFI shell,使用开源(BSD)TianoCore edk2/ShellPkg (源代码) 和 edk2/ShellBinPkg (二进制)包 (GIT 仓库)。

我推荐较新的外壳程序包,使用 UEFI Shell 2.0 的“完整 shell”配置文件(支持大多数命令)。您还可以使用 ShellPkg 重建自定义 shell(独立构建或将其包含在 OVMF 包中以生成 x64 版本)-在 Linux 发行版 iso 中包含 UEFI shell

[U]EFI shell 二进制文件经过编译,可独立于固件运行。可以通过将 shell 放在 FAT32 文件系统(USB 棒、硬盘分区)上、重命名为,/efi/boot/bootx64.efi然后从 [UEFI] BIOS 启动到该文件系统来进行测试。

通过输入 可以访问 shell 的帮助文本help utilname。只需使用help即可生成所有可用 shell 命令的列表。

注意:如果您无法直接从固件启动 UEFI Shell,请创建一个 FAT32 USB 笔式驱动器,并将 Shell.efi 复制为 (USB)/efi/boot/bootx64.efi 。此 USB 应出现在固件启动菜单中。启动此选项将为您启动 UEFI Shell。-Arch Linux 对 UEFI 的看法

答案3

Michael Niehaus 最近发布了用于修改 Windows 上的 UEFI 变量的 powershell 模块。

它提供以下功能:

  • 获取UEFI变量
  • 设置UEFI变量
  • 设置 LHSTokenPrivilege
  • 获取 UEFISecureBootCerts

答案4

如果有人感兴趣,我刚刚发布了我的实用程序。它在 Windows 中编辑 UEFI 变量。

https://gist.github.com/Zibri/19f9838ffd12349bb2c6c3afddc9388f/

于 2020 年 2 月 25 日更新至版本 1.2。
无需互联网连接。
由于代码被混淆,病毒总数报告 6(误报)超过 96。

相关内容