我正在UEFI模式下启动一个编译为x86_64-efi的GRUB应用程序。
这个GRUB应用程序发布了一个32位Linuxv3.18.48,带有CONFIG_EFIVAR_FS=y
和CONFIG_EFI_VARS=y
。
现在我想读一些efivars,但我甚至不能挂载efivarfs:
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
它返回“没有这样的设备”(ENODEV)。
这是预料之中的,因为dmesg说:
No EFI runtime due to 32/64-bit mismatch with kernel
查看Linux源代码:
if (!efi_runtime_supported())
pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n");
else {
if (efi_runtime_disabled() || efi_runtime_init())
return;
}
和
static inline bool efi_is_native(void)
{
return IS_ENABLED(CONFIG_X86_64) == efi_enabled(EFI_64BIT);
}
static inline bool efi_runtime_supported(void)
{
if (efi_is_native())
return true;
if (IS_ENABLED(CONFIG_EFI_MIXED) && !efi_enabled(EFI_OLD_MEMMAP))
return true;
return false;
}
似乎efi_runtime_supported()总是会对我返回false,因为CONFIG_X86_64=n
和CONFIG_EFI_MIXED
依赖于CONFIG_X86_64=y
。
在这种情况下,有什么办法可以让我阅读efivars吗?
制约因素:
发布于 2017-10-08 02:00:04
不,32位操作系统不能进行64位UEFI调用.
我不愿说在软件中任何事情都做不到,但这几乎是你所能得到的几乎不可能的。如果不切换到64位模式,就无法进行64位UEFI调用,这在32位OS启动之后将非常困难。
一种可能的方法是修改GRUB来读取变量并保存它们,并为操作系统提供一个32位的接口来检索它们。由于GRUB在操作系统启动后通常不会持续存在,这将是一个重大的改变。
发布于 2021-07-19 21:37:27
我能够在64位EFI机器上启动一个32位的Ubuntu,它是通过grub-efi-amd64-signed
包安装的,通过chroot
安装。参见此处的HowTo (德文):EFI-System/
无论如何,当GRUB更新的时候,我有时会遇到麻烦。
https://stackoverflow.com/questions/46610442
复制相似问题