私は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.c
Linuxでの書き込みから返される唯一の方法-EINVAL
は、作成されたデータの長さが属性に必要な4バイト未満であるか、属性に指定されたビットがない場合ですEFI_VARIABLE_MASK
。ここでは後者のように見えます。ちなみに、include/linux/efi.h
最初の3ビットは不揮発性、ブートアクセス、ランタイムアクセスを表しますが、マスクにはない最上位ビットも設定されます。
私はこのコンピュータ上のすべてのEFI変数の属性ビットを印刷する小さなスクリプトを書いていましたが、すべて最高のビットが設定されています。どういう意味ですか? efivarなどのツールが機能するように設定を解除する方法はありますか?明らかにどこかにバグがあります。efivar
このシステムのツール、Linuxカーネル、またはEFI実装に関連していますか?
さらに、この問題が常に存在するわけではありません。再起動する前に、上記の例では変数(キーボード固有のApple固有の変数)を設定できました。この問題が発生する前に、プロパティが何であるかを確認していません。