我有一台 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。