Não há dispositivos gerenciados pelo UEFI. Porque o sistema operacional Linux chamou a função UEFI ExitBootServices. Isso é necessário para permitir que o SO inicie o gerenciamento de qualquer dispositivo.
OS modernos incluem drivers para dispositivos de hardware. Um único dispositivo não deve ser acionado por dois drivers diferentes. Isso inclui dispositivos pai / "barramentos", que são usados para enumerar e se comunicar com seus dispositivos filhos.
Por exemplo, um hub USB em seu monitor, que você conecta ao seu computador através de uma porta USB-C, que está em uma placa PCI-E conectada a um slot PCI-E na placa-mãe. Seu firmware de inicialização pode ter a capacidade de carregar um executável EFI de um dispositivo de armazenamento USB conectado a essa porta USB. Mas quando você executa esse executável e chama o UEFI ExitBootServices, ele pode assumir o controle de todos eles.
Portanto, a regra geral é que o sistema operacional é o que enumera o hardware conectado. O firmware não tem mais controle. Você não pode pedir ao firmware para enumerar o hardware atualmente conectado e obter qualquer resultado sensato.
Existem exceções à regra geral. Eles são todos muito horríveis de se lidar. A pergunta, conforme escrita, não inclui nenhum motivo para enumerar todas as exceções que se aplicam à sua máquina. Então não faça isso.
Algumas informações de hardware estão disponíveis por meio de ACPI e DMI. As tabelas ACPI são tecnicamente fornecidas através de UEFI, em virtude da passagem de um ponteiro (e suponho que deixando a memória relevante reservada, no mapa de memória em que o SO é passado pela UEFI). Presumivelmente, o DMI é semelhante.
O comando DMI é dmidecode
. O DMI parece ser principalmente uma coleção de identificadores. Alguns deles são reunidos a partir do hardware no momento da inicialização. Nenhum destes é necessário para ser abrangente, então basicamente você precisa ter drivers de ônibus para encontrar todos os dispositivos de hardware que você precisa.
Existem vários comandos ACPI incluindo acpidump
e acpixtract
. Uma das ferramentas é um desmontador de uma linguagem interpretada chamada AML, que o sistema operacional executa em várias ocasiões.
A AML pode soar um pouco horrível, mas pelo menos foi projetada para que você evite ter um driver de sistema operacional e um driver AML associado ao mesmo hardware e causar conflitos. Por exemplo, o sistema operacional tem um driver para um dispositivo Embedded Controller e a AML pode realmente conversar com o driver do sistema operacional. Ou a ACPI pode reservar certos recursos de hardware, para que a AML possa usá-los diretamente, e o sistema operacional sabe que não é permitido usá-los.
O ACPI também substitui a versão anterior do ISA PNP. Isso é usado para enumerar dispositivos legados como portas seriais, onde eles não podem ser enumerados pelo próprio sistema operacional.
Da mesma forma, a ACPI é nominalmente responsável por informar ao sistema operacional para procurar os registros iniciais da PCI ou endereços de memória IO. (Não estou em dia aqui. Mas se a ACPI disser que não há nenhuma, posso imaginar que o Linux tentaria investigar o endereço normal para isso de qualquer maneira).
Muitos dispositivos são acessados através do barramento PCI, direta ou indiretamente.
O IIRC Windows irá expor isso no Gerenciador de Dispositivos mostrando PCI como um dispositivo filho da ACPI. O Linux não parece se incomodar (eu tenho pci0000:00/
diretamente em /sys/devices
); Não me lembro se a ACPI- > PCI está em um formato especializado que basicamente não há exposição de pontos, ou se é o Linux que, em casos especiais, não se incomoda em expor a ACPI como o dispositivo pai.