APMドライバ α3
概要
x86版BeOS R4.xでAPMを使用可能にします。
ノートPCやATXマシンで、電源管理機能(電源オフ・サスペンド・スタンバイ・ハイバネーション・電源状況取得など)が使えるようになります。
ただし、現段階では(特にノートPCで)レジューム時にいくつか問題があります。
各機能の動作可否はおおむね以下の通りです
(機種・マザーボード・ディスプレイドライバなどによります)。
電源管理機能 | ノートPC | ATX機
|
---|
電源オフ | ○ | ○
|
スタンバイ→レジューム | ○ | ○
|
サスペンド→レジューム | × | ○
|
ハイバネーション→レジューム | × | 不明
|
電源状況取得 | ○ | ○
|
要件
- APM仕様1.1/1.2に適合するAPM BIOSをもつPC/AT互換機
- Intel版BeOS R4/4.5
BIOSはなるべく最新版を使ってください。
作者は以下の環境でテストしました。
- GIGABYTE GA-686BX (APM 1.2)
導入
$ make install
で、apm・apmd・apmctlを適切なディレクトリにコピーします。
R4.5では、~/config/settings/kernel/drivers/kernelに以下のように記述してください。
~/config/settings/kernel/drivers/sample/kernel.sampleをコピーして編集するとよいでしょう。
apm trueとbios_calls disabledを有効にしてはいけません。
# bios_calls disabled
# apm true
_apm true
enable_shutdown true
アンインストールは
$ make uninstall
です。
利用法
apmdをバックグラウンドで実行します。
$ apmd &
UserBootscriptに書いておくとよいでしょう。
これでAPMが使用可能になり、以下のことが可能になります。
- シャットダウン時に自動で電源が切れるようになります。
- TrackerのBeメニューに"Suspend"が現れ、これによってサスペンドまたはハイバネーションすることができます。
- 外的要因(キー操作・スイッチ・蓋閉め・一定時間無操作・バッテリー消耗など)による省電力機能(スタンバイ・サスペンド・ハイバネーション)が使用可能になります。
ただし、デフォルトでは、本来サスペンドやハイバネーションになるところがすべてスタンバイになります。
- 後述のapmctlなど、APM BIOSを呼び出すプログラムが使用可能になります。
apmdを停止するには、スレッドIDを指定してSIGTERMかSIGKILLを送ります。
$ 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
サスペンド・ハイバネーションについて
サスペンドやハイバネーションからレジュームしたとき、以下のような問題があります。
- ディスプレイドライバによっては、画面表示が再開されなかったり、
再開されてもその後の描画が正常に行われないなど、操作の継続が困難な場合があります。
特に、ノートPC用のディスプレイドライバ(NeoMagicドライバなど)がこれに該当します。
- レジューム時に時計の更新を行っていないので、時計がずれることがあります。
- PCI IDEのDMA転送モードが解除されてしまうことがあるようで、
レジューム後最初のHDDアクセスの際にDMA転送に失敗してPIO転送に切り替わりますが、
このときに多少時間がかかります。
これはスタンバイでも起こります。
- 他にも、レジュームに対応していないデバイスやドライバでは不都合が生じるおそれがあります。
このため、デフォルトでは外的要因によるサスペンド・ハイバネーションは禁止してあり、
代わりにスタンバイするようにしています(apmctl suspend off)。
これにより、うっかりサスペンド・ハイバネーションしてしまうことを防いでいます
(BeメニューのSuspendやapmctl suspendは常にサスペンド・ハイバネーションしますので注意してください)。
外的要因によるサスペンド・ハイバネーションを有効にするには、
apmctl suspend onとします。
注意
シリアルポートやLANの着信によりレジュームする機能がある機種では、
サスペンドしてもすぐにレジュームしてしまうことがあります。
そのような場合は、着信によるレジュームを禁止してください。
機種によっては、シリアルポートやLANの使用中、
あるいはPCカード装着中はサスペンドしないようになっているものがあります。
拙作のPCカードイネーブラーをお使いの場合は、
サスペンド・ハイバネーションからレジュームしたら再度カードをコンフィギュレーションしてください。
お使いの機種で提供されている電源管理機能がすべて使用可能になるとは限りません。
特に、アイドル時にCPUを停止ないし低速化する機能はサポートしていません。
APM BIOSの実装には問題のあるものや規格に適合しないものが多いようです。
作者が確認した問題については回避策を講じましたが、機種によっては正常に動作しないおそれがあります。
動作報告について
開発の参考とするため、使用された方は作者まで動作報告をお寄せください。
その場合、以下の情報をお書き添えください。
- 機種固有の情報
- 本体またはマザーボードのメーカーとモデル
(できればAPM BIOSのバージョン(1.0/1.1/1.2)も)
- グラフィックカードまたはチップの名称(非標準ディスプレイドライバ使用時はドライバ名も)
- スタンバイの操作、スタンバイからのレジューム操作
- サスペンドの操作、サスペンドからのレジューム操作
- ハイバネーションの操作、ハイバネーションからのレジューム操作
- APMドライバの動作状況
- 電源オフの可否(BeメニューのShut Down・apmctl poweroff)
- スタンバイの可否(各種スタンバイ操作・apmctl standby)
- サスペンドの可否(各種サスペンド操作・BeメニューのSuspend・apmctl suspend)
- ハイバネーションの可否(同上)
- スタンバイ・サスペンド・ハイバネーションからのレジュームの可否
- apmctl statusの出力は妥当か
- その他
サスペンド・ハイバネーションのテストの際は、apmctl suspend onを実行し、
外的要因によるサスペンド・ハイバネーションを有効にしてください。
ノートPCの記入例は以下の通りです。
- 機種固有の情報
- IBM ThinkPad 535、APM BIOS 1.2
- 内蔵Trident Cyber 9320、Trident Cyberドライバ
- スタンバイ: Fn+F3キー・短時間無操作、
レジューム: 何かのキー・トラックポイント
- サスペンド: Fn+F4キー・蓋を閉める・長時間無操作・バッテリー消耗、
レジューム: Fnキー・蓋を開ける
- ハイバネーション: Fn+F12キー・長時間無操作・バッテリー消耗・電源スイッチ、
レジューム: 電源スイッチ
- APMドライバの動作状況
- 電源オフ: すべてOK
- スタンバイ: すべてOK
- サスペンド: すべてOK
- ハイバネーション: すべてOK
- スタンバイからのレジュームはOK、
サスペンドおよびハイバネーションからのレジュームは画面が映らないまま
- apmctl status: OK
- シリアルポート着信によるレジュームをONにしていると、
サスペンドしてもすぐにレジュームしてしまう。
PCカードがささっているとサスペンドしようとしてもスタンバイになることがある。
ATX機の記入例は以下の通りです。
- 機種固有の情報
- GIGABYTE GA-6BXS、APM BIOS 1.2
- ATI 3D Rage Pro Turbo AGP
- スタンバイ: なし、
レジューム: 何かのキー・マウス操作・スリープスイッチ・電源スイッチ・LAN
- サスペンド: スリープスイッチ、
レジューム: 何かのキー・マウス操作・スリープスイッチ・電源スイッチ・LAN
- ハイバネーション: 不明、
レジューム: 不明
- APMドライバの動作状況
- 電源オフ: すべてOK
- スタンバイ: すべてOK
- サスペンド: すべてOK
- ハイバネーション: 不明
- レジューム: すべてOK
- apmctl status: OK
- スタンバイとサスペンドは同じ機能のようだ。
LANにつながっていると、サスペンドしても勝手にレジュームすることがある。
前述の既知の問題以外にうまく動作しない機能がある場合は、以下のようにしてください。
- コマンドラインでtouch /var/log/apm.logを実行します。
- 再起動し、apmdを実行します。
- 問題の操作を行います。
- /var/log/apm.logにデバッグ出力がとれていることを確認します。
less /var/log/apm.logなどとして、中身があればOKです。
/var下はTrackerでは見えないので注意してください。
- 動作報告と/var/log/apm.logを作者にメールしてください。
問題が解決したら/var/log/apm.logは削除してかまいません。
使用条件
作者は本ソフトウェアに関していかなる権利も主張しません。
作者は本ソフトウェアの使用・配布についていかなる制約も設けません。
本ソフトウェアを運用した結果について作者は責任を負いません。
最新版は作者のwebページで公開しています。
改版履歴
- α1 (1999.3.10)
-
- α2 (1999.3.14)
-
- 一部の機種でAPMが有効にならない問題を修正。
- apmctl suspend on|offを新設。
- apmctl biosの引数を16進にした。
- デバッグ情報をログファイルにとるようにした。
- α3 (1999.8.3)
-
- ToDo
-
- レジューム時の時計の更新
- PCI IDEのDMAモードの回復
参考文献