Linux 커널은 시스템 펌웨어에서 ACPI 테이블을 어떻게 검색합니까?

Linux 커널은 시스템 펌웨어에서 ACPI 테이블을 어떻게 검색합니까?

Linux 커널이 부팅되면 시스템 펌웨어에서 ACPI 테이블을 검색합니다. 시스템이 부팅된 후 다음 유틸리티를 사용하여 실행 중인 커널 메모리에서 테이블을 검색할 수 있습니다.acpidump

다른 운영 체제도 유사한 프로세스를 따라야 하기 때문에 이 문제는 Linux에만 국한된 것이 아닐 수도 있지만, 처음에 Linux 커널이 시스템 펌웨어에서 이를 검색하는 방법에 여전히 관심이 있습니다. 일부 커널 소스 코드를 살펴봤지만 그것이 어떻게 작동하는지에 대한 직접적인 대답을 얻을 수 없습니다.

답변1

보다:http://wiki.osdev.org/RSDP

ACPI 테이블을 검색하는 첫 번째 단계는 RSDP(루트 시스템 설명 포인터)를 찾는 것입니다.

UEFI 시스템에서는 EFI_SYSTEM_TABLE에 편리하게 제공됩니다.

기존 BIOS 시스템에서는 두 개의 메모리 영역을 검색해야 합니다. 첫째, 16비트 리얼 모드 주소 0x40E에는 확장 BIOS 데이터 영역(EBDA)이 있는 위치를 나타내는 2바이트 세그먼트 포인터가 있습니다. RSDP는 EBDA의 처음 1KiB 내에 위치할 수 있으며 문자열 "RSD PTR"로 식별되며 16바이트 경계에 있음이 보장됩니다.

또 다른 가능한 영역은 1MiB 미만의 기본 BIOS 영역 또는 리얼 모드 주소 0x000E0000~0x000FFFFF입니다.

모든 펌웨어(플래시 EEP) ROM 콘텐츠와 마찬가지로 이러한 내용은 성능상의 이유로 펌웨어 자체에 의해 RAM("섀도우")에 복사되었습니다. 비휘발성 펌웨어 스토리지에 대한 액세스는 일반적으로 매우 복잡하고 빠르지 않습니다.

관련 정보