4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FreeBSDAdvent Calendar 2020

Day 21

ACPIの復習

Last updated at Posted at 2020-12-20

今日は冬至です。寒い裏日本の町からの投稿です。

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をオーバーライトしていました。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?