Dans le besoin d'entrer dans l'utilitaire de configuration du firmware UEFI lors de l'utilisation d'un démarrage ultra rapide (les pilotes de clavier ne sont pas chargés pendant le POST), je souhaite écrire dans la variable efi "Os Indications". Mon système d'exploitation est un noyau Ubuntu 14.04 3.13.0-35-générique.
OsIndications
La variable renvoie un masque de bits UINT64
OsIndicationsSupported
La variable renvoie un masque de bits UINT64Le
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit peut être défini dans la variable OsIndicationsSupported par le micrologiciel, si le micrologiciel prend en charge les demandes du système d'exploitation de s'arrêter à une interface utilisateur du micrologiciel. LeEFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit peut être défini par l'OS dans la variable OsIndications, si l'OS souhaite que le firmware s'arrête à une interface utilisateur du firmware au prochain démarrage.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Page 312 de la spécification UEFI 2.3.1C
Mon firmware a la possibilité d'accéder à l'utilitaire de configuration du firmware au prochain démarrage:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Je peux créer une nouvelle variable en /sys/firmware/efi/efivars
utilisant
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Cependant, l'écriture dans la variable efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
entraîne toutes sortes de write error: Invalid argument
:
Utiliser de nouveaux 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
Utilisation d'anciens sysfs-efivars maximum de 1024 octets
# 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
Vérifié la configuration requise pour la prise en charge des variables UEFI
- La prise en charge des services d'exécution EFI doit être présente dans les
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
retours du noyauCONFIG_EFI=y
- Le nombre / arc du processeur du noyau et le nombre / arc du processeur EFI doivent correspondre
? - Le noyau doit être démarré en mode EFI
CSM est désactivé dans l'utilitaire de configuration du micrologiciel / BIOS - Les services d'exécution EFI dans le noyau ne doivent pas être désactivés via la cmdline du noyau, c'est-à-dire que le paramètre du noyau noefi ne doit pas être utilisé.
cat /proc/cmdline | grep EFI
ne renvoie rien - Le système de fichiers efivarfs doit être monté dans / sys / firmware / efi / efivars
mount | grep efivars
renvoienone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
devrait répertorier les variables EFI sans aucune erreur
La commande répertorie 82 lignes et aucune erreur.- Vérifiez l'existence des fichiers / sys / firmware / efi / efivars / dump- *.
Il n'y a aucun fichier de vidage là-bas.
Selon https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402, la cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
commande devrait fonctionner dans Fedora 17.
La première suppression d'OsIndications ne s'améliore pas
# 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
Comment puis-je mettre à jour la variable efi OsIndications déjà existante dans Ubuntu 14.04 (trusty) à partir de la ligne de commande?
la source
-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
:? notez le "\" dans printf "\ x" que vous avez omis, le fait que nous remplissons la valeur entière et le raw_var à la fin du chemin.# 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
résultats-bash: printf: write error: Invalid argument
cat
commande?# ls -l enter-uefi-fw
retours-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.