Como funciona
O firmware UEFI identifica com GUIDs quase tudo o que manipula: os protocolos oferecidos pelos drivers, os módulos DXE, PEI e SMM, os volumes de firmware e os namespaces das variáveis, como o das variáveis globais de inicialização ou o dos bancos de assinaturas do Secure Boot. Um GUID isolado não diz nada; esta ferramenta pesquisa seu nome simbólico em um catálogo de milhares de GUIDs do EDK2 e dos principais fabricantes de firmware.
Um device path é o caminho que o firmware usa para chegar a um dispositivo ou a um arquivo: da raiz do barramento PCI até o controlador, o disco, a partição e o carregador .efi. As entradas de inicialização Boot#### armazenam um device path em binário; a ferramenta o traduz para sua forma de texto e explica cada nó com seus campos.
Exemplos
8BE4DF61-93CA-11D2-AA0D-00E098032B8CEfiGlobalVariableGuidNamespace das variáveis globais da especificação, como BootOrder, Boot#### ou SecureBoot.db-d719b2cb-3d3a-4596-a3bc-dad00e67656fEfiImageSecurityDatabaseGuidNome de arquivo de /sys/firmware/efi/efivars: a variável db do Secure Boot. A ferramenta extrai o GUID do nome.Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)Fv → FvFile 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 = FullShellEntrada de inicialização de um UEFI Shell integrado ao firmware: o arquivo é procurado por GUID dentro de um volume de firmware.01 00 00 00 20 00 55 00 45 00 46 00 49 00 20 00 4F 00 53 00 00 00 02 01 0C 00 D0 41 03 0A 00 00 00 00 01 01 06 00 02 1F 03 12 0A 00 00 00 FF FF 00 00 7F FF 04 00UEFI OS — PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)Conteúdo binário de uma variável Boot####: atributos, descrição e device path. Se você colar o arquivo do efivarfs, os quatro bytes de atributos da variável que vêm no início são reconhecidos automaticamente.Casos de uso
- Entender o que cada entrada listada pelo efibootmgr -v inicializa antes de alterar a ordem de inicialização ou excluir uma.
- Identificar os GUIDs que aparecem em um log de inicialização, em um dump de variáveis ou no código do EDK2.
- Saber a qual variável corresponde cada arquivo de /sys/firmware/efi/efivars, por exemplo os bancos de assinaturas do Secure Boot.
- Localizar qual disco, partição e arquivo uma entrada de inicialização usa quando ela deixou de funcionar depois de clonar ou substituir um disco.
- Revisar os módulos de uma imagem de firmware aberta com o UEFITool ou outras ferramentas de análise.
Perguntas frequentes
Onde obtenho o device path de uma entrada de inicialização?
No Linux, o efibootmgr -v mostra cada entrada com seu device path em texto, e os arquivos Boot#### de /sys/firmware/efi/efivars contêm o binário completo, que pode ser despejado com xxd ou hexdump -C. No UEFI Shell, bcfg boot dump -v mostra as entradas e map -v, os device paths dos discos.
Por que um GUID não consta no catálogo?
Qualquer fabricante pode criar GUIDs para seus próprios módulos sem registrá-los em lugar nenhum. O catálogo reúne os do EDK2 e os que a comunidade foi identificando em firmwares dos principais fabricantes, mas sempre haverá GUIDs proprietários sem nome. Os GUIDs de partição que aparecem nos nós HD são exclusivos de cada disco e nunca constam.
Quais formatos de device path são aceitos?
A forma de texto da especificação, como exibida pelo UEFI Shell e pelo EDK2, uma linha completa do efibootmgr -v e o binário em hexadecimal, separado ou não por espaços e também como saída do xxd ou do hexdump -C. O binário pode ser apenas o device path, o conteúdo de uma variável Boot#### ou o arquivo do efivarfs com seus atributos no início.
O device path é enviado para algum servidor?
Não. O device path é decodificado no seu navegador. Apenas os GUIDs de firmware que aparecem nos nós são consultados no servidor, para exibir seu nome; os GUIDs de partição e o restante dos dados não saem do seu computador.
O que significam os dados que o efibootmgr mostra depois do caminho do arquivo?
São os dados opcionais da entrada, que o firmware passa ao carregador. O Gerenciador de Inicialização do Windows, por exemplo, guarda ali uma referência ao seu repositório BCD. Eles não fazem parte do device path; se você colar o binário da variável, a ferramenta os mostra separadamente.