次のページ 前のページ 目次へ

4. デバッグのこつとプログラミング情報

4.1 ドライバが正しく動作していない。いかにして何が悪いか解明するか?

includes-AML-interpreter ドライバを使っているなら、この項を読んでください。

最初にドライバが初期化を行っているか?/proc/sys/acpi エントリをチェックする ことで確認できます。

エントリがあれば、ドライバが BIOS のための ACPI テーブルを置いたか、 チップセットに基づき推測したのか? /var/log/messages 内に 'ACPI: support found' の メッセージが見えるかどうかで確認できます――このメッセージが見えれば、 ドライバは BIOS からテーブル情報を得ています。このメッセージが見えなくとも、 ドライバは初期化をし、(PIIX4 か VIA のためにあらかじめ定義された) チップセットに基づく情報を使っています。

テーブルを使用しているなら、何を見てるのか?

acpidmp DSDT | acpidisasm 

acpidmp FACP | acpitbl 

のコマンドを使い調査します。

電源ボタンを押すことが ACPI イベントとして登録されているか?チェックのために

cat /proc/sys/acpi/events

とし、監視してください――それからもう一つのウィンドウでパワーボタンを 押します。変更が見えましたか?0でない値ですか?代わりに /var/log/messages に 'ACPI: EC GPE' のようなエントリが見えますか?

これは、ちょっとした予備的なチェックリストです――十分理解することを提案 します。

no-AML-interpreter ドライバを使っているなら、この項を読んでください。

最初にドライバが初期化を行っているか?/proc/sys/acpi エントリをチェックする ことで確認できます。

エントリがあれば、ドライバが BIOS のための ACPI テーブルを置いたか、 チップセットに基づき推測したのか? ドライバの tables オプションを使い、ドライバが初期化 していることを見れば確認できます。

テーブルを使用しているなら、何を見てるのか?

acpidmp DSDT | acpidisasm 

acpidmp FACP | acpitbl 

のコマンドを使い調査します。

acpid が起動してるなら、それに質問してから、ホストを停止します。電源オフは 実際に動作しますか (またはコンソールに 'Power off' と表示しそのままですか)?

電源ボタンを押すことが ACPI イベントとして登録されているか?チェックのために

echo "0xffffffff" > /proc/sys/acpi/pm1_enable
echo 0xffffffff > /proc/sys/acpi/gpe_enable

とします。この時、一つのウィンドウで

cat /proc/sys/acpi/events

とし、監視してください――それからもう一つのウィンドウでパワーボタンを 押します。変更が見えましたか?0でない値ですか?

これは、ちょっとした予備的なチェックリストです――十分理解することを提案 します。

4.2 役立つバグレポートの提出

ACPI バグを報告するのであれば、どうか以下の情報を含んでください。

1) 使用しているシステムの情報
   (マザーボード、チップセット、BIOS、システムベンダ)
2) カーネルログからの関連情報
     dmesg | grep -iE 'version|acpi|apm|e820' > kernel.log
   とし、関連する行を得ます。
3) 実際に経験した問題の詳細と可能ならその再現方法
4) acpidmp の出力
     acpidmp > acpidmp.log
   とし、入手します。acpidmp は pmtools パッケージの一部でセクション 2.3 で
   説明しています。

no-AML-interpreter ドライバを使っているなら、

5) デバッグオプションを有効にした acpid の出力
     acpid -d >& acpid.log
   とし入手します。acpid がクラッシュした場合に限り、上記に代えて
     acpid -dt >& acpid.log
   とし入手したフルデバッグトレースを送ってください。
   注意してください。これは非常に大きくなります。

includes-AML-interpreter ドライバを使っているなら、

5) デバッグオプションを有効にした acpid の出力
     acpid -d >& acpid.log
   とし入手します。

6) バグレポートとログファイルをまとめます。
     tar cvf - bugreport.txt *.log | gzip -9 > bug.tar.gz
   とし、それら (添付ファイルを好みます) を <tt/andy_henroid@yahoo.com/ に
   メールします。
7) ACPI4Linux メーリングリスト (<tt/acpi@phobos.fs.tum.de/) にもバグレポートを
   転送すべきです。ですが、ログファイルは送らないでください。これらはかなり
   大きく、たくさんの人が MULTI-MEGABYTE MAILING LIST MESSAGES のために迷惑を
   蒙ります。

4.3 Linux のデバイスドライバを書く人のための指針

コールのための追加情報は Documentation/pm.txt のファイルを参照してください。 これらのコールは、APM か ACPI のどちらか一方と一緒に動作します。 簡単に説明します。

  1. "pm_register" コールにより、デバイスの各々のインスタンスを登録します。
  2. ハードウェアにアクセスする前に "pm_access" をコールします (これは確実にハードウェアを起こし準備させます)。
  3. サスペンド状態 (ACPI D1-D3) に移行する前か、サスペンドからのリジューム (ACPI D0) の後にあなたの "pm_callback" はコールされます。
  4. デバイスを使用しなくなったとき、"pm_dev_idle" をコールします (コールするかは任意ですが、コールすればデバイスのアイドル検出は改善します)。
  5. アンロードするとき、"pm_unregister" コールにより、デバイスを未登録に します。


次のページ 前のページ 目次へ