默认 UEFI 启动顺序(在固件映像中)

问题描述 投票:0回答:2

使用 EDK2 构建固件,提供自定义默认启动顺序的最简单方法是什么?

例如,我知道 QEMU 的 Ovmf 基于 QEMU 的“bootorder”fw_cfg 文件(使用 QemuBootOrderLib 中的代码)以编程方式重新定义 UEFI 启动顺序。 因此,类似地,我可以以编程方式指定和强制执行启动顺序。

是否有更简单的方法来实现这一点(也许为 UEFI 变量提供自定义值)?

注意:不使用shell!我需要将此配置包含在固件映像中!

firmware uefi
2个回答
1
投票

您需要提供 Boot0001/Boot0002/... 和 BootOrder 变量。第一个具有指定的格式,并且需要有效的设备路径才能正常工作,因此您的启动设备也应该预定义,第二个只是 UINT16 的列表。 阅读本文了解更多信息。


0
投票

您也可以从 OS shell 执行此操作,有一个名为

virt-fw-vars
的实用程序,它分布在 Red Hat 系统上的
python3-virt-firmware
中。要使用 HTTP UEFI URL 创建“一次性”重启,请执行以下操作:

virt-fw-vars -i /usr/share/OVMF/OVMF_VARS.fd --set-boot-uri http://myserver/boot/shim.efi -o mydomain_VARS.fd

要永久更改启动顺序,您可以使用相同的工具来操作

Boot####
变量,请参阅帮助屏幕以获取更多信息。 NVRAM 图像文件通常驻留在
/var/lib/libvirt/qemu/nvram
中,因此您要修改这些文件。这是我的虚拟机的输出:

# virt-fw-vars -i /var/lib/libvirt/qemu/nvram/bohemia_VARS.fd -p
INFO: reading raw edk2 varstore from /var/lib/libvirt/qemu/nvram/bohemia_VARS.fd
INFO: var store range: 0x64 -> 0xe000
5254007EE2ED        : blob: 60 bytes
Attempt 1           : blob: 1049 bytes
Attempt 2           : blob: 1049 bytes
Attempt 3           : blob: 1049 bytes
Attempt 4           : blob: 1049 bytes
Attempt 5           : blob: 1049 bytes
Attempt 6           : blob: 1049 bytes
Attempt 7           : blob: 1049 bytes
Attempt 8           : blob: 1049 bytes
Boot0000            : boot entry: title="UiApp" devpath=FvName(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFileName(462caa21-7614-4503-836e-8ab6f4662331)
Boot0001            : boot entry: title="UEFI Misc Device" devpath=PciRoot()/PCI(dev=07:0) optdata=4eac0881119f594d850ee21a522c59b2
Boot0002            : boot entry: title="EFI Internal Shell" devpath=FvName(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFileName(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
Boot0007            : boot entry: title="Red Hat 6" devpath=PciRoot()/PCI(dev=07:0)/Partition(nr=1)/FilePath(\EFI\redhat\grub.efi)
BootOrder           : boot order: 0007, 0001, 0002, 0000
ClientId            : blob: 20 bytes
ConIn               : devpath: PciRoot()/PCI(dev=01:0)/ACPI(hid=0x30341d0,uid=0x0)
ConOut              : devpath: PciRoot()/PCI(dev=01:0)/ACPI(hid=0x50141d0,uid=0x0)/Msg(subtype=0xe)/Msg(subtype=0xa)
ErrOut              : devpath: PciRoot()/PCI(dev=01:0)/ACPI(hid=0x50141d0,uid=0x0)/Msg(subtype=0xe)/Msg(subtype=0xa)
InitialAttemptOrder : qword: 0x0807060504030201
Key0000             : blob: 14 bytes
Key0001             : blob: 14 bytes
Lang                : ascii: "eng"
MTC                 : dword: 0x00000017
MemoryTypeInformation: blob: 48 bytes
PlatformLang        : ascii: "en"
Timeout             : word: 0x0000
VarErrorFlag        : byte: 0xff
© www.soinside.com 2019 - 2024. All rights reserved.