2017-10-06 6 views
0

私はx86_64-efiにコンパイルされたGRUB EFIアプリケーションを、x86_64のUEFIモードで起動しています。32bitカーネルは64bit UEFIからどのようにefivarsを読み取ることができましたか?

このGRUBアプリケーションは、CONFIG_EFIVAR_FS=yCONFIG_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=nCONFIG_EFI_MIXEDCONFIG_X86_64=yに依存します。

これらの条件の下で私がefivarsを読むことを可能にする回避策はありますか?

制約:UEFIと

  • x86_64版のファームウェアのみのモード。
  • GRUB x86_64-efiはLinuxを起動します。
  • Linuxカーネルv3.18.48(パッチ適用可能)、32ビット。

答えて

1

いいえ、32ビットOSは64ビットUEFI呼び出しを行うことができません。

はソフトウェアで行うことはできませんが、これはほぼ不可能に近づいています。 64ビットモードに切り替えることなく64ビットのUEFI呼び出しを行うことはできません。これは、32ビットOSの起動後には非常に困難です。

可能なアプローチの1つは、変数を読み込んで保存し、OSがそれらを取得するための32ビットインターフェイスを提供するようにGRUBを変更することです。 GRUBはOSの起動後も一般に持続しないので、これは大きな変更になります。

+0

ええ、最も簡単な解決策は、GRUBがvarsを読み込み、カーネルブートパラメータを渡すことです。そして、それほど簡単には聞こえません... – lseki

関連する問題