Como o kernel do Linux recupera tabelas ACPI do firmware do sistema?

2

Quando o kernel do Linux é inicializado, ele recupera as tabelas ACPI do firmware do sistema. Depois que o sistema inicializar, posso recuperar as tabelas da memória do kernel em execução com utilitários como acpidump

Talvez essa questão não seja realmente específica do Linux, porque outros SOs precisam seguir algum procedimento semelhante, mas ainda estou interessado em como o kernel do Linux os recupera do firmware do sistema inicialmente. Eu observei alguns códigos-fonte do kernel, mas não consegui uma resposta direta sobre como isso funciona.

    
por Eloy 10.12.2017 / 20:20

1 resposta

3

Por favor, veja: link

O primeiro passo para recuperar as tabelas ACPI é encontrar o Ponteiro de Descrição do Sistema Raiz ou RSDP.

Em sistemas UEFI, ele é convenientemente fornecido dentro do EFI_SYSTEM_TABLE.

Nos sistemas BIOS tradicionais, duas áreas de memória precisam ser pesquisadas. Primeiro, no endereço de modo real de 16 bits 0x40E, haverá um ponteiro de segmento de 2 bytes indicando onde está localizada a EBDA (Extended BIOS Data Area). O RSDP poderia estar dentro do primeiro 1 KiB de EBDA, identificado pela cadeia "RSD PTR", que é garantido para ser localizado em um limite de 16 bytes.

A outra área possível é a área principal do BIOS, abaixo de 1 MiB, ou os endereços em modo real 0x000E0000 a 0x000FFFFF.

Como todo o conteúdo ROM do firmware (flash EEP), eles já são copiados para a RAM ("sombreado") pelo próprio firmware por motivos de desempenho: o acesso ao firmware não volátil é geralmente bastante complicado e não muito rápido.

    
por 10.12.2017 / 22:26