使用 UEFI Shell 恢复启动配置

使用 UEFI Shell 恢复启动配置

我使用的是支持 UEFI 的嵌入式主板。这是一块新式主板,配有 American Megatrends BIOS 和 UEFI shell(我更习惯在嵌入式主板上处理引导加载程序,而不是 PC BIOS)。

董事会的细节并不那么重要。

重要的是,在某些条件下(在软件中以不正确的方式写入 PCI 空间时),我们可以阻止板载闪存中的引导扇区。

由于该硬件将是一个远程硬件,因此无法选择走到任何地方,插入 USB 并重新刷新此东西。

我想编写一个脚本让 BIOS Shell 执行此操作。如果机器被攻击,并且我们已损坏已部署系统的引导扇区,我想自动运行恢复序列。这种事情可能吗?我可以用 UEFI shell 来做吗?这无论如何都可行吗?

现在我明白了 UEFI 的创建是为了提供“安全”启动,我可能做的与它预期要做的相反!

答案1

EFI 不使用磁盘的引导扇区。因此,我怀疑您误解了系统发生的情况。我的猜测是您实际上正在破坏保存设备启动顺序的 NVRAM 条目。处理此问题的最简单方法是不使用这些条目,而是命名您的 EFI 引导加载程序EFI/BOOT/bootx64.efi(或更一般地说,,boot{arch}.efi其中{arch}是体系结构代码;x64是 x86-64 的体系结构代码)。如果您出于某种原因不想这样做,如果你的 EFI shell 是版本 2shell,您可以使用bcfgEFI shell 脚本中的命令来完成此任务。此命令在不同的地方有不同程度的文档记录,例如Arch Linux 维基英特尔的网站。不幸的是,旧版本 1 EFI shell 不支持该bcfg命令,因此此选项不适用于它,尽管可以从中提取相关代码TianoCore 源代码并创建一个bcfg可以与旧 shell 一起使用的独立命令。

如果您确实需要写入 MBR,那么用 C 编写 EFI 应用程序可能比尝试在 EFI shell 中执行此操作更好。目前有很多 EFI 编程文档,但大多数都像 Unix 手册页一样——它假设您已经了解该主题,只需检查详细信息即可。我写了一个简短的教程介绍,但它非常基础,不涉及磁盘 I/O。(您可以使用它和源代码gptsync,包含在最近几个版本的rEFInd,但是,要学习如何读取和写入磁盘的 MBR。

如果我理解正确的话,无论你做什么(除非使用后备文件名就足够了),你都需要将其纳入正常的启动顺序。这可以通过默认启动的 EFI shell 程序或二进制程序来实现;但你必须确保你的自定义程序最后启动了“真正的”引导加载程序,或者“真正的”引导加载程序在新程序之后启动。

相关内容