首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >32位内核如何从64位UEFI读取efivars?

32位内核如何从64位UEFI读取efivars?
EN

Stack Overflow用户
提问于 2017-10-06 16:48:01
回答 2查看 942关注 0票数 1

我正在UEFI模式下启动一个编译为x86_64-efi的GRUB应用程序。

这个GRUB应用程序发布了一个32位Linuxv3.18.48,带有CONFIG_EFIVAR_FS=yCONFIG_EFI_VARS=y

现在我想读一些efivars,但我甚至不能挂载efivarfs:

代码语言:javascript
运行
复制
mount -t efivarfs efivarfs /sys/firmware/efi/efivars

它返回“没有这样的设备”(ENODEV)。

这是预料之中的,因为dmesg说:

代码语言:javascript
运行
复制
No EFI runtime due to 32/64-bit mismatch with kernel

查看Linux源代码:

代码语言:javascript
运行
复制
     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;
     }

代码语言:javascript
运行
复制
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=nCONFIG_EFI_MIXED依赖于CONFIG_X86_64=y

在这种情况下,有什么办法可以让我阅读efivars吗?

制约因素:

  • 只有UEFI模式的x86_64固件;
  • GRUB x8664-efi将推出Linux;
  • Linux内核v3.18.48 (可能是补丁),32位。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-08 02:00:04

不,32位操作系统不能进行64位UEFI调用.

我不愿说在软件中任何事情都做不到,但这几乎是你所能得到的几乎不可能的。如果不切换到64位模式,就无法进行64位UEFI调用,这在32位OS启动之后将非常困难。

一种可能的方法是修改GRUB来读取变量并保存它们,并为操作系统提供一个32位的接口来检索它们。由于GRUB在操作系统启动后通常不会持续存在,这将是一个重大的改变。

票数 2
EN

Stack Overflow用户

发布于 2021-07-19 21:37:27

我能够在64位EFI机器上启动一个32位的Ubuntu,它是通过grub-efi-amd64-signed包安装的,通过chroot安装。参见此处的HowTo (德文):EFI-System/

无论如何,当GRUB更新的时候,我有时会遇到麻烦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46610442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档