コマンドラインでOsInductions efi変数を作成/編集/更新する方法は?

コマンドラインでOsInductions efi変数を作成/編集/更新する方法は?

UEFIファームウェア設定ユーティリティに入る必要がある超高速ブートを使用するとき(POST中にキーボードドライバがロードされない)、「Os Inspirations」efi変数に書きたいと思います。私のオペレーティングシステムはUbuntu 14.04カーネル3.13.0-35-genericです。

OsIndications変数はUINT64ビットマスクを返します。

OsIndicationsSupported変数はUINT64ビットマスクを返します。

EFI_OS_INDICATIONS_BOOT_TO_FW_UIファームウェアがファームウェアのユーザーインターフェイスで停止するようにOS要求をサポートしている場合、ファームウェアはOsInductionsSupported変数でこのビットを設定できます。EFI_OS_INDICATIONS_BOOT_TO_FW_UIオペレーティングシステムが次の起動時にファームウェアのユーザーインターフェイスでファームウェアを停止したい場合、オペレーティングシステムはOsIndicates変数でこのビットを設定できます。

EFI_OS_INDICATIONS_BOOT_TO_FW_UI= 0x0000000000000001-UEFI仕様2.3.1C 312ページ

私のファームウェアは、次の起動時にファームウェア設定ユーティリティに入ることができます。

$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008

/sys/firmware/efi/efivars以下を使用して新しい変数を作成できます。

$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc

ただし、efi変数に書き込むとOsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8cさまざまな結果が発生する可能性がありますwrite error: Invalid argument

新しいefivafを使用してください

# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument

# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument

# printf "\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument

# cat enter-uefi-fw > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
cat: write error: Invalid argument

古い1024バイトの最大sysfs-efivarsを使用する

# cat enter-uefi-fw > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
cat: write error: Input/output error

# cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
cat: write error: Invalid argument

# echo 'enter-uefi-fw' > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
-bash: echo: write error: Invalid argument

# printf "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
-bash: printf: write error: Invalid argument

UEFI変数のサポートが正しく機能するには、要件を確認してください。

  1. EFIランタイムサービスのサポートは、カーネル
    $ cat /boot/config-$(uname -r) | grep CONFIG_EFI=yリターンに表示する必要があります。CONFIG_EFI=y
  2. コアプロセッサビット/アーキテクチャとEFIプロセッサビット/アーキテクチャは一致する必要がありますか
  3. カーネルはEFIモードで起動する必要があります。
    ファームウェア設定ユーティリティ/BIOSでCSMが無効になっています。
  4. カーネルコマンドラインを介してカーネルのEFIランタイムサービスを無効にしないでください。つまり、noefiカーネルパラメータを使用しないでください。
    cat /proc/cmdline | grep EFI何も返さない
  5. efivarfsファイルシステムは、/sys/firmware/efi/efivars
    mount | grep efivarsreturnにマウントする必要があります。none on /sys/firmware/efi/efivars type efivarfs (rw)
  6. efivar -lEFI変数はエラーなしでリストする必要があります。
    このコマンドはエラーなしで82行を一覧表示します。
  7. /sys/firmware/efi/efivars/dump-* ファイルがあることを確認してください。
    ダンプファイルが存在しません。

~によるとhttps://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402このcat enter-uefi-fw > /sys/firmware/efi/vars/new_varコマンドはFedora 17で動作します。

OsInductionsを最初に削除しても改善されませんでした。

# rm -rv /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
removed '/sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c'
# ls -l enter-uefi-fw
-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
# cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
cat: write error: Invalid argument

コマンドラインでUbuntu 14.04(信頼できる)の既存のOsInductions efi変数を更新するには?

ベストアンサー1

多数のファームウェアエラーが原因で非標準のUEFI変数を削除すると、システムファームウェアがPOSTを実行できなくなります。 エピワフよく知られている標準化変数でないファイルは、不変ファイルとして生成されます。

https://www.kernel.org/doc/Documentation/filesystems/efivarfs.txt

これは、次のコマンドで確認して変更できます。lsattrそしてシャテル注文する。

たとえば、

root@hi12:/tmp/test# hexdump -C out 
00000000  07 00 00 00 10 00 00 00                           |........|
00000008
root@hi12:/tmp/test# cp out /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
cp: cannot create regular file '/sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23': Operation not permitted
root@hi12:/tmp/test# lsattr  /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
----i-------------- /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23
root@hi12:/tmp/test# chattr -i /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
root@hi12:/tmp/test# lsattr  /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
------------------- /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23
root@hi12:/tmp/test# cp out /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
root@hi12:/tmp/test# chattr +i /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
root@hi12:/tmp/test# lsattr  /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
----i-------------- /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23
root@hi12:/tmp/test# 

おすすめ記事