今日は冬至です。寒い裏日本の町からの投稿です。
Windows 95の頃の電源制御はAPM(Advanced Power Management)という仕組みでしたが、Windows 98の頃からACPIという仕組みが利用されるようになりました。FreeBSDでも5くらいからACPIのサポートが入りました。
ACPIはBIOSの頃にできたものですが、現在のUEFIでも使われています。FreeBSDでACPIがサポートされているのはi386とamd64だけです。
ACPIはAdvanced Configuration and Power Interfaceの略称で、パワーマネージメントだけでなく、デバイスのコンフィグレーションの機能もあります。近年arm環境などで利用されているDTSに似ています。
しかしながらDTSはコンフィグレーションを取得して実際のコンフィグレーションはデバイスを直接叩くよう仕組みですがACPIはそれ自体にも設定機能があります。
電源周りについては、ACPIはノートパソコンのリジュームやハイバネーションまたパソコン一般の電源のOFF機能などに利用されます。
ACPIはOSが起動してマシンが保持しているAMLといわれるバイナリを取得して解釈して、それの方法に従って処理を行います。
FreeBSDではacpicaというintelが主導しているリファレンス実装をカーネルに入れて、FreeBSD固有の処理を行っています。
なぜACPIのことを調べていたかというと、FreeBSD/i386をインストールした、VALUESTARがWOLできないためです。AC電源入れたあとはWOLできるのですが、FreeBSDでpoweroffした後はWOLできません。ACPIまわりの問題のような気がしていますが、まだ解決できてません。
sys/dev/acpica/acpi.cのacpi_shutdown_final(void *arg, int howto)という関数があって、i386やamd64の場合最後の処理になるのではないかと思います。
2000年くらいには日本ではFreeBSDをノートパソコンで使うための環境のPAOがありました。結構利用されていた方も多かったのではないでしょうか。PAOは主にAPMとPCMCIAをカスタマイズしていました。当初のACPIサポートはノートパソコンが先行していて、PAOの流れだったのかFreeBSDのACPIサポートは日本の開発者の方々が主導していたようです。PAOのもう一つの機能のPCMCIA/CardBusのサポートはメインラインに取り入れられず、それにより日本ではFreeBSDの開発者のモチベーションが低下して、ユーザーが減っていく事になりました。
代わりに入ったPCMCIAサポートも13Rで消されてしまうようで、昔の事を思い出しました。
復習としたのは昔初代VAIO C1でFreeBSDを使っていて、この頃はいろいろAMLをいじっていたからでした。C1はACPI過渡期のWindows 98のマシンでAMLはぐちゃぐちゃでした。SONYがこんな製品作るんだとがっかりした記憶があります。
C1のようにACPIのサポートが不完全なものはFreeBSDではブラックリストでACPIが使われないようになっていました。このため修正したAMLをオーバーライトしていました。