Linux-Kernel
Linux 核心如何從系統韌體中檢索 ACPI 表?
當 Linux 核心啟動時,它會從系統韌體中檢索 ACPI 表。系統啟動後,我可以使用實用程序從正在執行的核心記憶體中檢索表,例如
acpidump
也許這個問題並不是真正的 Linux 特定的,因為其他作業系統必須遵循一些類似的程序,但我仍然對 Linux 核心最初如何從系統韌體中檢索它們感興趣。我查看了一些核心原始碼,但無法直接回答它是如何工作的。
請參閱:http ://wiki.osdev.org/RSDP
檢索 ACPI 表的第一步是找到根系統描述指針或 RSDP。
在 UEFI 系統上,它方便地在 EFI_SYSTEM_TABLE 中給出。
在傳統的 BIOS 系統上,需要搜尋兩個記憶體區域。首先,在 16 位實模式地址 0x40E 中將有一個 2 字節的段指針指示擴展 BIOS 數據區 (EBDA) 的位置。RSDP 可以在 EBDA 的前 1 KiB 內,由字元串“RSD PTR”標識,保證位於 16 字節邊界上。
另一個可能的區域是低於 1 MiB 的主 BIOS 區域,或實模式地址 0x000E0000 到 0x000FFFFF。
與所有韌體(快閃記憶體 EEP)ROM 內容一樣,出於性能原因,韌體本身已將這些內容複製到 RAM(“隱藏”):訪問非易失性韌體儲存通常相當複雜,而且速度不是很快。