Um das UEFI-Firmware-Setup-Dienstprogramm während des ultraschnellen Starts aufrufen zu können (Tastaturtreiber werden während des POST nicht geladen), möchte ich in die efi-Variable "Os Indications" schreiben. Mein Betriebssystem ist Ubuntu 14.04 Kernel 3.13.0-35-generic.
OsIndications
Variable gibt eine UINT64-Bitmaske zurück
OsIndicationsSupported
Variable gibt eine UINT64-Bitmaske zurückDas
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
Bit kann von der Firmware in der Variablen OsIndicationsSupported gesetzt werden, wenn die Firmware Betriebssystemanforderungen zum Anhalten an einer Firmware-Benutzeroberfläche unterstützt. DasEFI_OS_INDICATIONS_BOOT_TO_FW_UI
Bit kann vom Betriebssystem in der Variablen OsIndications gesetzt werden, wenn das Betriebssystem möchte, dass die Firmware beim nächsten Start an einer Firmware-Benutzeroberfläche stoppt.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Seite 312 der UEFI-Spezifikation 2.3.1C
Meine Firmware kann beim nächsten Start das Firmware-Setup-Dienstprogramm aufrufen:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Ich kann bei /sys/firmware/efi/efivars
Verwendung eine neue Variable erstellen
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Das Schreiben in die efi-Variable OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
führt jedoch zu allen möglichen Ergebnissen write error: Invalid argument
:
Neue Efivarfs verwenden
# 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
Verwenden Sie alte sysfs-efivars mit maximal 1024 Byte
# 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
Überprüft, ob die Anforderungen für die Unterstützung von UEFI-Variablen ordnungsgemäß funktionieren
- EFI Runtime Services-Unterstützung sollte in den Kernel-
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
Retouren vorhanden seinCONFIG_EFI=y
- Kernel Prozessor Bitness / Arch und EFI Prozessor Bitness / Arch sollten übereinstimmen
? - Der Kernel sollte im EFI-Modus gestartet werden.
CSM ist im Firmware-Setup-Dienstprogramm / BIOS deaktiviert - EFI-Laufzeitdienste im Kernel sollten nicht über die Kernel-Cmdline deaktiviert werden, dh der Noefi-Kernel-Parameter sollte nicht verwendet werden.
cat /proc/cmdline | grep EFI
gibt nichts zurück - Das Dateisystem von efivarfs sollte unter / sys / firmware / efi / efivars
mount | grep efivars
zurückgegeben werdennone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
sollte die EFI-Variablen ohne Fehler
auflisten Der Befehl listet 82 Zeilen und keine Fehler auf.- Überprüfen Sie, ob / sys / firmware / efi / efivars / dump- * Dateien vorhanden sind.
Dort existieren keine Dump-Dateien.
Laut https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402 sollte der cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
Befehl in Fedora funktionieren 17.
Das erste Löschen von OsIndications verbessert sich nicht
# 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
Wie kann ich die bereits vorhandene OsIndications efi-Variable in Ubuntu 14.04 (vertrauenswürdig) über die Befehlszeile aktualisieren?
quelle
-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
? Beachten Sie das führende '\' in printf '\ x', das Sie weggelassen haben, die Tatsache, dass wir den gesamten Wert eingeben, und die raw_var am Ende des Pfads.# 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
Ergebnisse in-bash: printf: write error: Invalid argument
cat
Befehl ausgeführt haben?# ls -l enter-uefi-fw
return-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.