Na necessidade de entrar no utilitário de configuração do firmware UEFI enquanto estiver usando a inicialização ultrarrápida (os drivers do teclado não são carregados durante o POST), desejo escrever na variável efi "Os Indications". Meu sistema operacional é o Ubuntu 14.04 kernel 3.13.0-35-genérico.
OsIndications
A variável retorna uma máscara de bits UINT64
OsIndicationsSupported
A variável retorna uma máscara de bits UINT64O
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit pode ser definido na variável OsIndicationsSupported pelo firmware, se o firmware suportar solicitações do SO para parar em uma interface com o usuário do firmware. OEFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit pode ser definido pelo sistema operacional na variável OsIndications, se o sistema operacional desejar que o firmware pare em uma interface com o usuário do firmware na próxima inicialização.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Página 312 da UEFI spec 2.3.1C
Meu firmware tem a capacidade de entrar no utilitário de configuração de firmware na próxima inicialização:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Eu posso criar uma nova variável /sys/firmware/efi/efivars
usando
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
No entanto, escrever para a variável efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
resulta em todos os tipos de write error: Invalid argument
:
Usando novos 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 sysfs-efivars máximos antigos de 1024 bytes
# 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
Verificados os requisitos para o suporte a variáveis UEFI para funcionar corretamente
- O suporte dos EFI Runtime Services deve estar presente nos
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
retornos do kernelCONFIG_EFI=y
- A testemunha / arco do processador do kernel e a testemunha / arco do processador EFI devem corresponder
? - O kernel deve ser inicializado no modo EFI O
CSM está desabilitado no utilitário de configuração do firmware / BIOS - Os serviços de tempo de execução EFI no kernel não devem ser desativados via cmdline do kernel, ou seja, o parâmetro noefi kernel não deve ser usado.
cat /proc/cmdline | grep EFI
não retorna nada - O sistema de arquivos efivarfs deve ser montado em
mount | grep efivars
retornos / sys / firmware / efi / efivarsnone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
deve listar as variáveis EFI sem nenhum erro
O comando lista 82 linhas e nenhum erro.- Verifique a existência de arquivos / sys / firmware / efi / efivars / dump- *.
Não existem arquivos de despejo lá.
De acordo com https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402, o cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
comando deve funcionar no Fedora 17
A primeira exclusão de OsIndications não melhora
# 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
Como posso atualizar a variável efi OsIndications já existente no Ubuntu 14.04 (confiável) na linha de comando?
fonte
-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 o '\' inicial em printf '\ x' que você omitiu, o fato de estarmos preenchendo todo o valor e o raw_var no final do caminho.# 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
resulta em-bash: printf: write error: Invalid argument
cat
comando?# ls -l enter-uefi-fw
retorna-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.