APMドライバ α3


概要

x86版BeOS R4.xでAPMを使用可能にします。 ノートPCやATXマシンで、電源管理機能(電源オフ・サスペンド・スタンバイ・ハイバネーション・電源状況取得など)が使えるようになります。 ただし、現段階では(特にノートPCで)レジューム時にいくつか問題があります。

各機能の動作可否はおおむね以下の通りです (機種・マザーボード・ディスプレイドライバなどによります)。

電源管理機能 ノートPCATX機
電源オフ
スタンバイ→レジューム
サスペンド→レジューム ×
ハイバネーション→レジューム ×不明
電源状況取得

要件

BIOSはなるべく最新版を使ってください。

作者は以下の環境でテストしました。


導入

$ make install

で、apmapmdapmctlを適切なディレクトリにコピーします。

R4.5では、~/config/settings/kernel/drivers/kernelに以下のように記述してください。 ~/config/settings/kernel/drivers/sample/kernel.sampleをコピーして編集するとよいでしょう。 apm truebios_calls disabledを有効にしてはいけません。

# bios_calls disabled
# apm true
_apm true
enable_shutdown true

アンインストールは

$ make uninstall

です。


利用法

apmdをバックグラウンドで実行します。

$ apmd &

UserBootscriptに書いておくとよいでしょう。 これでAPMが使用可能になり、以下のことが可能になります。

apmdを停止するには、スレッドIDを指定してSIGTERMSIGKILLを送ります。

$ ps | grep apmd
/boot/home/config/bin/apmd (team 246)
   1234                 apmd  zzz  10        0       28
/bin/grep apmd (team 256)
$ kill -TERM 1234

KillTeamやTManagerを使ってもよいでしょう。 apmdを停止すると、外的要因による省電力機能は使用不能になります。


ユーティリティプログラム

付属のユーティリティapmctlは、APMを直接制御します。

apmctl standby
スタンバイに入ります。
apmctl suspend
数秒でサスペンドまたはハイバネーションに入ります。
apmctl suspend on
外的要因によるサスペンド・ハイバネーションを有効にします。
apmctl suspend off
外的要因によるサスペンド・ハイバネーションを無効にし、 代わりにスタンバイに入るようにします。 起動時のデフォルトはこの状態です。
apmctl poweroff
数秒で電源を切ります。確認を求めます。 OSの正規のシャットダウン処理は行われません。通常は使わないでください。
apmctl status
電源の状況を表示します。
apmctl bios AX BX CX DX SI DI
APM BIOSを呼び出します。 6個までの16進数の引数をとり、それぞれAX・BX・CX・DX・SI・DIレジスタに格納してAPM BIOSを呼びます(AHは53Hになります)。 戻るとエラーコードおよび各レジスタの値を16進数で表示します。 ただしAXの値はゴミなので表示しません。 例えば、以下のようにするとサスペンドします。
$ apmctl 7 1 2

サスペンド・ハイバネーションについて

サスペンドやハイバネーションからレジュームしたとき、以下のような問題があります。

このため、デフォルトでは外的要因によるサスペンド・ハイバネーションは禁止してあり、 代わりにスタンバイするようにしています(apmctl suspend off)。 これにより、うっかりサスペンド・ハイバネーションしてしまうことを防いでいます (BeメニューのSuspendやapmctl suspendは常にサスペンド・ハイバネーションしますので注意してください)。 外的要因によるサスペンド・ハイバネーションを有効にするには、 apmctl suspend onとします。


注意

シリアルポートやLANの着信によりレジュームする機能がある機種では、 サスペンドしてもすぐにレジュームしてしまうことがあります。 そのような場合は、着信によるレジュームを禁止してください。

機種によっては、シリアルポートやLANの使用中、 あるいはPCカード装着中はサスペンドしないようになっているものがあります。

拙作のPCカードイネーブラーをお使いの場合は、 サスペンド・ハイバネーションからレジュームしたら再度カードをコンフィギュレーションしてください。

お使いの機種で提供されている電源管理機能がすべて使用可能になるとは限りません。 特に、アイドル時にCPUを停止ないし低速化する機能はサポートしていません。

APM BIOSの実装には問題のあるものや規格に適合しないものが多いようです。 作者が確認した問題については回避策を講じましたが、機種によっては正常に動作しないおそれがあります。


動作報告について

開発の参考とするため、使用された方は作者まで動作報告をお寄せください。 その場合、以下の情報をお書き添えください。

サスペンド・ハイバネーションのテストの際は、apmctl suspend onを実行し、 外的要因によるサスペンド・ハイバネーションを有効にしてください。

ノートPCの記入例は以下の通りです。

ATX機の記入例は以下の通りです。

前述の既知の問題以外にうまく動作しない機能がある場合は、以下のようにしてください。

  1. コマンドラインでtouch /var/log/apm.logを実行します。
  2. 再起動し、apmdを実行します。
  3. 問題の操作を行います。
  4. /var/log/apm.logにデバッグ出力がとれていることを確認します。 less /var/log/apm.logなどとして、中身があればOKです。 /var下はTrackerでは見えないので注意してください。
  5. 動作報告と/var/log/apm.logを作者にメールしてください。

問題が解決したら/var/log/apm.logは削除してかまいません。


使用条件

作者は本ソフトウェアに関していかなる権利も主張しません。 作者は本ソフトウェアの使用・配布についていかなる制約も設けません。 本ソフトウェアを運用した結果について作者は責任を負いません。

最新版は作者のwebページで公開しています。


改版履歴

α1 (1999.3.10)
α2 (1999.3.14)
α3 (1999.8.3)
ToDo

参考文献