私はx86_64-efiにコンパイルされたGRUB EFIアプリケーションを、x86_64のUEFIモードで起動しています。32bitカーネルは64bit UEFIからどのようにefivarsを読み取ることができましたか?
このGRUBアプリケーションは、CONFIG_EFIVAR_FS=y
とCONFIG_EFI_VARS=y
という32ビットLinux v3.18.48を起動します。
今、私はいくつかのefivarsを読みたいが、私はさえefivarfsマウントすることはできません。
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
「そのようなデバイス」(ENODEV)を返しません。 Linuxのソースを見てみると
No EFI runtime due to 32/64-bit mismatch with kernel
:
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を返しますdmesgのは言うので、それが期待されていた
CONFIG_X86_64=n
とCONFIG_EFI_MIXED
はCONFIG_X86_64=y
に依存します。
これらの条件の下で私がefivarsを読むことを可能にする回避策はありますか?
制約:UEFIと
- x86_64版のファームウェアのみのモード。
- GRUB x86_64-efiはLinuxを起動します。
- Linuxカーネルv3.18.48(パッチ適用可能)、32ビット。
ええ、最も簡単な解決策は、GRUBがvarsを読み込み、カーネルブートパラメータを渡すことです。そして、それほど簡単には聞こえません... – lseki