LinuxカーネルはシステムファームウェアからACPIテーブルをどのように検索しますか?

LinuxカーネルはシステムファームウェアからACPIテーブルをどのように検索しますか?

Linuxカーネルが起動すると、システムファームウェアはACPIテーブルを検索します。システムが起動したら、次のユーティリティを使用して実行中のカーネルメモリからテーブルを取得できます。acpidump

他のオペレーティングシステムも同様のプロセスに従う必要があるため、この問題はLinuxに固有のものではないかもしれませんが、最初にLinuxカーネルがシステムファームウェアでそれを取得する方法にはまだ興味があります。いくつかのカーネルソースコードを見てみましたが、それがどのように機能するかについて直接の答えを得ることはできません。

ベストアンサー1

より:http://wiki.osdev.org/RSDP

ACPIテーブルを検索する最初のステップは、ルートシステム記述ポインタ(RSDP)を見つけることです。

UEFIシステムでは、EFI_SYSTEM_TABLEに便利です。

既存のBIOSシステムでは、2つのメモリ領域を検索する必要があります。まず、16ビットリアルモードアドレス0x40Eには、拡張BIOSデータ領域(EBDA)がある場所を示す2バイトセグメントポインタがあります。 RSDPはEBDAの最初の1KiB内にあり、文字列「RSD PTR」で識別され、16バイトの境界にあることが保証されます。

別の可能な領域は、1MiB未満のデフォルトBIOS領域またはリアルモードアドレス0x000E0000〜0x000FFFFFです。

すべてのファームウェア(フラッシュEEP)ROMコンテンツと同様に、これらの内容はパフォーマンス上の理由でファームウェア自体によってRAM(「シャドウ」)にコピーされました。不揮発性ファームウェアストレージへのアクセスは通常、非常に複雑で高速ではありません。

おすすめ記事