Existe algum comando ou método (diferente de RTFM) para determinar se um sistema possui um BIOS UEFI?

7

Minha inspiração para perguntar isso é esta outra pergunta em Pergunte ao Ubuntu .

Uma das razões pelas quais estou perguntando é que estou apenas curioso. Eu gostaria de saber mais sobre isso para qualquer valor que possa ter no futuro.

Mas eu também gostaria de saber para que eu tenha um procedimento que eu possa pedir a um usuário para executar quando estou me perguntando WTF pode estar com eles e seu sistema. ; -)

Inicialmente, imaginei se essa informação poderia ser detectada e relatada por uma ferramenta como (ou semelhante a) dmidecode . Mas o que aconteceria quando um UEFI BIOS estivesse simulando um pre-UEFI BIOS ?

Espero que esta questão só se torne mais interessante com o passar do tempo. Parece que as empresas por trás de cada um dos principais sistemas operacionais insistirão em implementar EFI support fazendo " a mesma coisa apenas diferente ". <sigh/>

    
por irrational John 14.05.2012 / 02:01

2 respostas

3

Um sistema pode ter um firmware UEFI e ainda inicializar o SO no modo legacy BIOS. Nessa situação, não há como o SO inicializar determinar se o hardware é realmente capaz de usar UEFI, porque o BIOS não é compatível com o UEFI.

Você ainda pode consultar a interface do firmware se algo estiver relacionado ao UEFI, mas isso é específico do fornecedor e inconsistente. Portanto, também não há resposta definitiva desse lado.

O método canônico para provar que seu kernel x86 (_64) é inicializado a partir do UEFI:

    $ dmesg | grep 'EFI v'
    [    0.000000] efi: EFI v2.31 by EDK II

O kernel irá imprimir tal mensagem em o ponto de entrada principal da inicialização do EFI. O kernel é inicializado com UEFI se e somente se tal mensagem existir.

Outras informações informativas:

    $ dmesg | grep 'efi: mem'
    [    0.000000] efi: mem00: type=7, attr=0xf, range=[0x0000000000000000-0x00000000000a0000) (0MB)
    ...

Este é o mapa de memória passado do firmware EFI para o kernel.

    $ ls -F /sys/firmware/efi
    efivars/  systab  vars/

Estas são ABI do kernel relacionadas à EFI. efivars (3.8+) e vars são ABI do kernel para o EFI NVRAM, portanto você pode alterar as opções de inicialização com eles.

Mas a falta dessas pistas não prova que o sistema é apenas BIOS.

Empiricamente, laptops recentes têm firmware UEFI. Os servidores mais recentes estão migrando para o firmware UEFI.

Editar: O autor do rEFInd tem uma explicação mais completa . Os passos são os mesmos.

Além disso, o Firmware Test Suite do Ubuntu pode detectar se o firmware UEFI tem um funcionalidade de compatibilidade para BIOS legado . Embora não resolva o problema de detectar a inicialização de firmware com capacidade de UEFI no modo BIOS.

    
por 30.11.2012 / 10:02
2

Quando você entra no "BIOS" (EFI, na verdade), um dos itens da lista de itens inicializáveis deve ser o EFI boot prompt , se for um sistema UEFI. Às vezes, isso é chamado de shell EFI. É muito parecido com uma versão emaciada de um prompt de comando do Unix. Normalmente você não o desejará na lista de inicialização, mas pode ser útil durante a configuração inicial e durante a solução de problemas.

Suponho que um sistema UEFI poderia ser feito sem esse recurso, mas você estaria desistindo de muito do que faz a EFI, bem, a EFI fazer isso.

    
por 14.05.2012 / 06:28