/sys/firmware/efi/efivars/ 中的 efi 变量条目

inf*_*ged 5 uefi

/sys/firmware/efi/efivars/ 中的条目是什么?

我看到它们是小的二进制文件。是这些地址和地址的内容吗?例如 /sys/firmware/efi/efivars/BootFromUSB-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9 十六进制显示

000000000: 0700 0000 00                             ....
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

sta*_*lue 5

这些是 efivars 文件系统中的文件,可让您访问 UEFI 变量。对于每个 UEFI 变量,在/sys/firmware/efi/efivars/.

您的示例BootFromUSB-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9具有 NameBootFromUSB和 VendorGuid ec87d643-eba4-4bb5-a1e5-3f3e36b20da9。GUID 确保具有相同名称但来自不同供应商的变量不会干扰。UEFI 规范中定义了一些变量,但不是这个。

内容的前四个字节是属性,在 UEFI 规范中也有定义。最重要的是

#define EFI_VARIABLE_NON_VOLATILE       0x00000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
#define EFI_VARIABLE_RUNTIME_ACCESS     0x00000004
Run Code Online (Sandbox Code Playgroud)

所以你的变量是非易失性的,可以在启动和运行时访问。

任何剩余的字节都是变量的值。在这种情况下,只有一个值为 0 的字节。

您可以使用 UEFI 变量来影响引导过程。例如,当标准固件不起作用时,我们使用这样的变量将下一次引导切换到替代恢复固件。

请注意,efivars文件系统允许您通过写入文件来写入 EFI 变量。执行此操作时要小心,因为覆盖某些变量可能会使您的系统变砖。