EFI変数属性に追加のビットが設定されるのはなぜですか。これらの属性を維持しながら値を変更するにはどうすればよいですか。

EFI変数属性に追加のビットが設定されるのはなぜですか。これらの属性を維持しながら値を変更するにはどうすればよいですか。

私は2015 MacBook ProでLinux 5.10-rc2を実行しています。どのように動作するかを理解するために、EFI変数を変更したいと思います。ただし、を使用して修正しようとするとエラーがefivar発生します。Invalid argument使用法はstrace次のように表示されます。

openat(AT_FDCWD, "/sys/firmware/efi/efivars/SPIKeyboardNoComm-4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14", O_WRONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=8, ...}) = 0
write(4, "\7\0\0\200\22\0\0\0", 8)      = -1 EINVAL (Invalid argument)

引用符fs/efivarfs/file.cLinuxでの書き込みから返される唯一の方法-EINVALは、作成されたデータの長さが属性に必要な4バイト未満であるか、属性に指定されたビットがない場合ですEFI_VARIABLE_MASK。ここでは後者のように見えます。ちなみに、include/linux/efi.h最初の3ビットは不揮発性、ブートアクセス、ランタイムアクセスを表しますが、マスクにはない最上位ビットも設定されます。

私はこのコンピュータ上のすべてのEFI変数の属性ビットを印刷する小さなスクリプトを書いていましたが、すべて最高のビットが設定されています。どういう意味ですか? efivarなどのツールが機能するように設定を解除する方法はありますか?明らかにどこかにバグがあります。efivarこのシステムのツール、Linuxカーネル、またはEFI実装に関連していますか?

さらに、この問題が常に存在するわけではありません。再起動する前に、上記の例では変数(キーボード固有のApple固有の変数)を設定できました。この問題が発生する前に、プロパティが何であるかを確認していません。

ベストアンサー1

おすすめ記事