En la necesidad de ingresar a la utilidad de configuración de firmware UEFI mientras se usa el arranque ultrarrápido (los controladores de teclado no se cargan durante la POST), deseo escribir en la variable efi "Indicaciones Os". Mi sistema operativo es Ubuntu 14.04 kernel 3.13.0-35-generic.
OsIndications
La variable devuelve una máscara de bits UINT64
OsIndicationsSupported
La variable devuelve una máscara de bits UINT64El
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit se puede establecer en la variable OsIndicationSupported por el firmware, si el firmware admite solicitudes del sistema operativo para detenerse en una interfaz de usuario de firmware. ElEFI_OS_INDICATIONS_BOOT_TO_FW_UI
sistema operativo puede establecer el bit en la variable OsIndication, si el sistema operativo desea que el firmware se detenga en una interfaz de usuario de firmware en el próximo arranque.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Página 312 de la especificación UEFI 2.3.1C
Mi firmware tiene la capacidad de ingresar a la utilidad de configuración de firmware en el próximo arranque:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Puedo crear una nueva variable al /sys/firmware/efi/efivars
usar
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Sin embargo, escribir en la variable efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
da como resultado todo tipo de write error: Invalid argument
:
Usando nuevos 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
Usando viejos 1024 bytes máximo 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
Se verificaron los requisitos para que el soporte de variables UEFI funcione correctamente
- El soporte de EFI Runtime Services debe estar presente en los
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
retornos del kernelCONFIG_EFI=y
- El bitness / arch del procesador del kernel y el bitness / arch del procesador EFI deben coincidir
? - El núcleo debe iniciarse en modo EFI
CSM está deshabilitado en la utilidad de configuración de firmware / BIOS - Los servicios de tiempo de ejecución EFI en el kernel no deben deshabilitarse a través de cmdline del kernel, es decir, el parámetro noefi kernel no debe usarse.
cat /proc/cmdline | grep EFI
no devuelve nada - efivarfs sistema de archivos debe montarse en / sys / firmware / efi / efivars
mount | grep efivars
retornosnone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
debería enumerar las variables EFI sin ningún error
El comando enumera 82 líneas y ningún error.- Verifique la existencia de archivos / sys / firmware / efi / efivars / dump- *.
No existen archivos de volcado allí.
De acuerdo con https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402, el cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
comando debería funcionar en Fedora 17)
Primero eliminar OsIndication no mejora
# 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
¿Cómo puedo actualizar la variable efi de OsIndication ya existente en Ubuntu 14.04 (confiable) desde la línea de comandos?
fuente
-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
:? observe el '\' inicial en printf '\ x' que omitió, el hecho de que estamos completando el valor completo y el raw_var al final de la ruta.# 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
resultados en-bash: printf: write error: Invalid argument
cat
comando?# ls -l enter-uefi-fw
devoluciones-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.