Nella necessità di accedere all'utility di configurazione del firmware UEFI durante l'utilizzo dell'avvio ultra rapido (i driver della tastiera non vengono caricati durante il POST), desidero scrivere nella variabile efi "Os Indications". Il mio sistema operativo è il kernel Ubuntu 14.04 3.13.0-35-generico.
OsIndications
La variabile restituisce una maschera di bit UINT64
OsIndicationsSupported
La variabile restituisce una maschera di bit UINT64Il
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit può essere impostato nella variabile OsIndicationsSupported dal firmware, se il firmware supporta le richieste del sistema operativo di interrompere un'interfaccia utente del firmware. IlEFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit può essere impostato dal sistema operativo nella variabile OsIndications, se il sistema operativo desidera che il firmware si arresti all'interfaccia utente del firmware al successivo avvio.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Pagina 312 della specifica UEFI 2.3.1C
Il mio firmware ha la possibilità di accedere all'utility di configurazione del firmware al prossimo avvio:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Posso creare una nuova variabile /sys/firmware/efi/efivars
usando
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Tuttavia, la scrittura nella variabile efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
comporta tutti i tipi di write error: Invalid argument
:
Utilizzando nuovi efivarfs
# 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
Utilizzando vecchi sysfs-efivar da 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
Controllato i requisiti per il supporto delle variabili UEFI per funzionare correttamente
- Il supporto di EFI Runtime Services dovrebbe essere presente nei
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
ritorni del kernelCONFIG_EFI=y
- Il testimone / arco del processore del kernel e il testimone / arco del processore EFI devono corrispondere
? - Il kernel dovrebbe essere avviato in modalità EFI
CSM è disabilitato nell'utility di configurazione del firmware / BIOS - I servizi di runtime EFI nel kernel non devono essere disabilitati tramite cmdline del kernel, ovvero non si devono utilizzare i parametri del kernel noefi.
cat /proc/cmdline | grep EFI
non restituisce nulla - Il filesystem efivarfs dovrebbe essere montato su
mount | grep efivars
ritorni / sys / firmware / efi / efivarsnone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
dovrebbe elencare le variabili EFI senza errori
Il comando elenca 82 righe e nessun errore.- Verificare l'esistenza di file / sys / firmware / efi / efivars / dump- *.
Non esistono file di dump lì.
Secondo https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402 il cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
comando dovrebbe funzionare in Fedora 17.
La prima eliminazione di OsIndications non migliora
# 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
Come posso aggiornare la variabile efi OsIndications già esistente in Ubuntu 14.04 (fidato) dalla riga di comando?
-bash: echo: write error: Invalid argument