Trouble Shooting Record (ハードウェア関連)


1. MN-550-X20: Suspend/Resume 後にサウンドが鳴らない [解決]

環境

SHARP Mebius MN-550-X20 (Sound: Crystal CS4232)
Slackware 7.0 (Kernel 2.2.19)

現象

サウンド自体は OSS を用いて問題なく動作している。 このときのカーネルコンフィグレーションは以下の通り (抜粋) 。
CONFIG_APM=y
CONFIG_APM_DO_ENABLE=y
CONFIG_APM_CPU_IDLE=y
CONFIG_APM_RTC_IS_GMT=y
(snip)
CONFIG_SOUND=y
CONFIG_SOUND_OSS=m
CONFIG_SOUND_CS4232=m
CONFIG_SOUND_YM3812=m

またドライバは起動時に /etc/rc.d/rc.local に以下のエントリを記述することで 組み込んでいる。
/sbin/modprobe sound
/sbin/insmod ad1848
/sbin/insmod uart401
/sbin/insmod cs4232 io=0x530 irq=5 dma=1 dma2=3

この状態で Suspend/Resume させると、Resume 後サウンドが鳴らなくなってしまう。 再起動すれば問題なし。

解決方法

Resume 後に、サウンドドライバ・モジュールを一度アンロード (rmmod) した後、 再度ロード (modprobe/insmod) すれば OK 。

ampd を利用している場合は、apmd_proxy を利用して Resume 時に自動的に処理させる ことができる。
まず /etc/rc.d/rc.M を以下のように修正する。
# Start the APM daemon if APM is enabled in the kernel:
if [ -x /usr/sbin/apmd ]; then
  if cat /proc/apm 1> /dev/null 2> /dev/null ; then
    echo "Starting APM daemon..."
    /usr/sbin/apmd -P /etc/apmd/apmd_proxy
                   ~~~~~~~~~~~~~~~~~~~~~~~ 追加
  fi
fi

(存在しなければ) /etc/apmd ディレクトリを作成し、その下に以下のような内容の apmd_proxy ファイルを作成する。実行権も忘れずに付けておくこと。
#!/bin/sh

/usr/bin/logger "apmd_proxy: $*"

case "$1,$2" in
start,*)
        ;;

stop,*)
        ;;

suspend,*)
        /sbin/rmmod cs4232
        /sbin/rmmod uart401
        /sbin/rmmod ad1848
        /sbin/rmmod sound
        ;;

standby,*)
        ;;

resume,*)
        /sbin/modprobe sound
        /sbin/insmod ad1848
        /sbin/insmod uart401
        /sbin/insmod cs4232 io=0x530 irq=5 dma=1 dma2=3
        ;;

change,*)
        ;;

esac
exit 0

あとは再起動すれば、Suspend/Resume 時に自動的にサウンドドライバの再ロードが 行われるようになる。
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

2. MN-550-X20: Suspend/Resume 後にマウスの動きがぎこちなくなる [回避]

環境

SHARP Mebius MN-550-X20 (Video: Trident Cyber 9385-1)
Slackware 7.0 (Kernel 2.2.19)
XFree86 3.3.5 (XF86_SVGA)
GNOME 1.0

現象

X を起動した状態で Suspend/Resume させると、Resume 後にマウスの動きがぎこち なくなる。サンプリングレートが低くなったような感じ。 ウィンドウマネージャは Sawmill でも Enlightenment でも同じ。

解決方法

一度 X を再起動すると、とりあえず直る。
# よって今は Suspend 前には X を終了させるという情けない運用...。(--;
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

3. MN-550-X20: お茶を飲ませたらキーボードが効かない [解決]

環境

SHARP Mebius MN-550-X20
Slackware 7.0 (Kernel 2.2.19)
Happy Hacking Keyboard (PS/2 接続)

現象

ある日、キーボードにお茶を飲ませると、キーボードが一切効かなくなってしまった。 この Note PC には PS/2 接続の Happy Hacking Keyboard を接続して 普段はそちらを使っており、そちらは問題なく動作する。 またマシン自体の動作にも問題はない。

再起動すると、起動メッセージの途中から 変な文字 (制御コード?) が際限なく 表示される。何かキーを押すと、変な文字の表示は止まり、login プロンプトが 表示される。以後、動作は正常 (に見える) 。

解決方法

キーボードを掃除したら直った。が、一部のキー (BS など) は依然反応しない。 やっぱり回路の一部が死んでるのかなぁ。しくしく。
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

4. ThinkPad X21: Suspend できない [解決]

環境

IBM ThinkPad X21
Plamo Linux 2.2.1 (Kernel 2.2.19 + glibc 2.2)

現象

蓋を閉じても CTRL + F4 でもサスペンドしない。CTRL + F3 の時の動作のよう。 インストール直後はできていた (と思った) のだが...。 以下、いろいろ試してみた事。

  • General setup - Use real mode APM BIOS call to power off を y --> n に変更してカーネル再構築。
    • 現象変わらず。ちなみにこの時、NIC の電源切れず。
    • apm -s だと PCMCIA NIC の電源も切れる。
    • apm -s して蓋の閉じ、開けをしたらフリーズ。
  • General setup - Allow interrupts during APM BIOS calls を y --> n に変更してカーネル再構築。
    • ダメ。現象変わらず。
  • General setup - Advanced Power Management BIOS support を y --> n に変更。 Sound - Sound card support のみ y 。後はすべて n (Additional の miroPCI もすべて n) に変更して、カーネル再構築。
    • ダメ。やはりmiropcm20 の所でエラー。
    • Sound 関連の設定を元に戻す。
  • Allow interrupts during APM BIOS calls を n 。 Use real mode APM BIOS call to power off を y という組合せで再構築。
    • 蓋を閉じて、電源コードを抜くと、おつき様まーくが点滅。
    • そして「ぴっ、ぶっ」の音。
    • HDD は止まったようだがファンが回っている。
    • 開いても、どんなキーを押しても resume しない。げ。

思考錯誤する中で、AC 電源が供給されているか否かで、動作が異なるらしい ことが分かった。 そこで、全て元の設定に戻し、いろいろ試した結果は以下の通り。

  • AC 供給 + CTRL + F4 では...
    • ファン ON
    • HDD 落ちかけるが、また動き出す
    • おつきさまは OFF
    • 電源ランプは ON
    • PCMCIA NIC の link ランプは ON
    • 任意のキーで resume
  • AC 供給 + apm -s では...
    • ファン ON
    • HDD OFF
    • おつきさまは OFF
    • 電源ランプは ON
    • PCMCIA NIC の link ランプは OFF
    • 任意のキーで resume
  • AC off + CTRL + F4 (および AC off + apm -s) では...
    • ファン OFF
    • HDD OFF
    • おつきさまは ON
    • 電源ランプは OFF
    • PCMCIA NIC の link ランプは OFF

おお、これこれ。こうでないといけないのだが...。 でも、AC のステータスに影響されるって、どういうこと? BIOS で SpeedStep の設定を Maximum Performance や Disable にしても関係なし。 むう。

解決方法

ふと、apmd が動いていない事に気づいた。 /etc/rc.d/rc.M を見ると、apmd 起動部分がコメントアウトされている。
# Start the APM daemon if APM is enabled in the kernel:
#if [ -x /usr/sbin/apmd ]; then
#  if cat /proc/apm 1> /dev/null 2> /dev/null ; then
#    echo "Starting APM daemon..."
#    /usr/sbin/apmd
#  fi
#fi

コメント記号をはずし有効にし、再起動。dmesg に以下のログ。 これで蓋閉じで、問題なく Suspend するようになった。
apm: BIOS version 1.2 Flags 0x03 (Driver version 1.13)
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

5. ThinkPad X21: Suspend/Resume 後に内蔵 NIC が動作しない [解決]

環境

IBM ThinkPad X21
Plamo Linux 2.2.1 (Kernel 2.2.19 + glibc 2.2)

現象

Suspen/Resume すると内蔵 NIC (eth0: eepro100) で ping が飛ばない。

解決方法

ifconfig eth0 down/up するとおっけー。
じゃなくて、この場合デフォルトルートが消えてしまうので、これが正解。
ifconfig eth0 down
ifconfig eth0 up
route add default gw xxx.xxx.xxx.xxx

/etc/apmd_proxy に記述しておけば、Resume 時に自動的に処理してくれて、まる。
  # ------------------------------- RESUME ---------------------------
  # Resume ... from standby is a NOP, except the clock update.
  "resume")     
        # Typically the Linux system clock needs to be reset.
        update_clock
(snip)
        # other common actions:  reload troublesome drivers
        # EXAMPLE: reload OSS sound drivers.  Path may vary.
        #       /usr/local/bin/soundon
        #
        /sbin/ifconfig eth0 down               <--- 追加
        /sbin/ifconfig eth0 up                 <--- 追加
        route add default gw xxx.xxx.xxx.xxx   <--- 追加
        ;;

  # ------------------------------- START ----------------------------
  # Called when apmd first starts.
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

6. ThinkPad X21: Suspend できない (再び) [解決]

環境

IBM ThinkPad X21
Plamo Linux 2.2.1 (Kernel 2.2.19 + glibc 2.2)

現象

いつの間にやら、また Suspend できなくなってしまった。(--;
AC off にして蓋を閉じるぶんには、動作に問題はないのだが、AC on のままでは 蓋を閉じても HDD への電源供給などが止まらない。 直ったはずなのにぃ〜。ど〜してぇ〜。

解決方法

/etc/apmd_proxy を以下のように修正して、ログを取ってみる。
# METHOD 1 - Logs command line arguments of apmd_proxy only
logger apmd_proxy $*          <--- 行頭の # を削除

AC on のまま閉じて (Suspend) 、また開いた (Resume) 場合のログ。
Nov 25 17:34:00 jevex kernel: hda: status timeout: status=0xd0 { Busy }
Nov 25 17:34:00 jevex kernel: hda: no DRQ after issuing WRITE
Nov 25 17:34:00 jevex kernel: ide0: reset: success

AC off で閉じて (Suspend) 、また開いた (Resume) 場合のログ。
Nov 25 17:37:32 jevex 11月 25 17:37:32 logger: apmd_proxy change power
Nov 25 17:37:32 jevex apmd[32689]: Now using Battery Power
Nov 25 17:37:32 jevex apmd[32689]: Battery: * * * (100% unknown)
Nov 25 17:37:32 jevex cardmgr[64]: executing: './serial suspend ttyS1'
Nov 25 17:37:33 jevex 11月 25 17:37:33 logger: apmd_proxy suspend system
Nov 25 17:37:33 jevex apmd[32689]: System Suspend
Nov 25 17:38:03 jevex 11月 25 17:38:03 logger: apmd_proxy resume suspend
Nov 25 17:38:03 jevex cardmgr[64]: executing: './serial resume ttyS1'
Nov 25 17:38:21 jevex apmd[32689]: Normal Resume after 00:00:48 (100% 1 day, 12:27) Battery power

調べると、どうやら AC on の時には /etc/apmd_proxy が呼ばれていないらしい。
(AC on 時)
$ /usr/bin/on_ac_power 
$ echo $?
0

(AC off 時)
$ /usr/bin/on_ac_power 
98        <--- たぶんバッテリー残量
$ echo $?
1

いろいろ探したところ、The Linux ThinkPad mailing list にそのまんまな情報 (
http://www.bm-soft.com/~bm/archives/200012/msg00159.html) あり。
以下、一部引用。
> As we all know, several TP models (mine is a 600E) refuse
> to suspend/hibernate if the machine is on AC power AND if
> there are powered PC-cards in the slots.

> I know. The problem is only, that apm does _not_ generate
> any event at all if on AC power with a running card in the
> slot. The APM-BIOS itself refuses to suspend and does not
> bother to send an event - that's the problem (at least on
> my TP600E).

ふむ。たーしーかーに Modem カード (PC-Card) が刺さっている。
Modem カードを抜いて Suspend/Resume させると問題なく動作した。 以下、その時のログ。
Nov 27 07:23:11 hostname apmd[214]: System Suspend
Nov 27 07:23:41 hostname apmd[214]: Normal Resume after 00:00:30 (96% unknown) AC power
[ 先頭 | 末尾 | 戻る | トップページに戻る ]