ACPI

ちょっとした出来心で、ACPI BIOSのテーブルを読もうとして見ました。 まず、BIOSだから0xe0000-0xfffffまでをmmapしてそれでRoot System Description Pointerは16バイト境界で配置されてる筈だから.....っと。ふんふん。 シグネチャ読めて、OEMIDも読めたと。で一つスキップして、(アライメントの ためだろーなあ。)次が...ん?アドレス?これSegment:Offsetの形?それとも 物理アドレス?それにどういう並び方?いわゆるIntel型のLittle Endian? どうやっても絶対ある筈のRSDT(Root System Description Descriptor)シグネチャ がみえないよお。ええい、ならBIOSの範囲を/dev/mem開けて直接stringsかけて 検索じゃあ...やっぱりない。どうなっとんじゃあとかおもって、もう一度 ACPIスペックを読み直す。ん?RSD PTRのみ"In Low Memory space on 16 byte boundry"で他は"Located in memory space(0-4G)"!?つまり、ブート時に認識して 保護してやんないとOSは構わずに上書きしてしまうっつーこと?改めて、 Intel型のLittle Endianとしてポインタを見るとそこは0x3ff3000で、64MB実装 されている物理メモリのうしろ64KByteあたりってこと?そ、そんなあ。 どうやってあげれば良いんでしょ?をれ様カーネルでメモリはいじったことないです。

で、久しぶりにACPIホームページを見るとACPIのスペックがバージョンアップ してて、ACPI 2.0に向けてのコメントを求むと言う話があるそうな。 しかし、フル実装する気は更々ないけど......ややこしいよー。