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.
OsIndicationsLa variabile restituisce una maschera di bit UINT64
OsIndicationsSupportedLa variabile restituisce una maschera di bit UINT64Il
EFI_OS_INDICATIONS_BOOT_TO_FW_UIbit 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_UIbit 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/efivarsusando
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Tuttavia, la scrittura nella variabile efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8ccomporta 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=yritorni 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 EFInon restituisce nulla - Il filesystem efivarfs dovrebbe essere montato su
mount | grep efivarsritorni / sys / firmware / efi / efivarsnone on /sys/firmware/efi/efivars type efivarfs (rw) efivar -ldovrebbe 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_varcomando 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