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.
OsIndicationsLa variable devuelve una máscara de bits UINT64
OsIndicationsSupportedLa variable devuelve una máscara de bits UINT64El
EFI_OS_INDICATIONS_BOOT_TO_FW_UIbit 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_UIsistema 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/efivarsusar
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Sin embargo, escribir en la variable efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8cda 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=yretornos 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 EFIno devuelve nada - efivarfs sistema de archivos debe montarse en / sys / firmware / efi / efivars
mount | grep efivarsretornosnone on /sys/firmware/efi/efivars type efivarfs (rw) efivar -ldeberí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_varcomando 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 argumentprintf "\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_varresultados en-bash: printf: write error: Invalid argumentcatcomando?# ls -l enter-uefi-fwdevoluciones-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw.