電源SWで電源が落ちるようにする

Debian LS-QVL

ハックキットのインストーラを使って Debian をインストールしてみたが、
・telnet でアクセスできなかった。
・電源SW長押しで電源OFFできず、リブートしてくる。

telnet でアクセスはできるようになったので、
次は電源SW周りを見る。

標準ファームを見てみる

標準ファームがどう動いているか、見てみる

標準ファームへログイン

ssh で可能な標準ファームのHDDを再び作り (と、一言で書いているけど、これがまた大変)、
ssh でログインする。

手動で shutdown してみる

ハックキットでは、電源ボタン長押しを検知すると、
shutdown -h now を実行している。

手動で shutdown -h now を実行してみる。

root@LS-QVLF42:~# shutdown -h now
POWER LED が点滅、普通に落ちた。
???

ハックキットを見てみる

ハックキットにログイン


Linux 2.6.31.8 (x60l.yamasita.jp) (pts/0)

qvl login: guest
Password:
Last login: Sun Jun 17 22:25:30 JST 2012 from qube.yamasita.jp on pts/0
Linux qvl 2.6.31.8 #2 Tue Mar 13 13:10:42 JST 2012 armv5tel

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No directory, logging in with HOME=/
guest@qvl:/$ su - root
Password:
root@qvl:~#

シャットダウンしてみる

root@qvl:~# shutdown -h now
リブートしてきた。

この違いは何??

電源OFFのシーケンスを見る

標準ファームで電源SW長押ししてから電源が落ちるまでの シーケンスを見てみる。

/usr/local/sbin/kernelmon

起動時に、/etc/init.d/kernelmon.sh から起動され、 常駐している。

/usr/local/sbin/kernelmon は、
/proc/buffalo/kernevnt に何かが出力されたら、
/usr/local/bin/kernelmon_exec.sh にそれを渡す

/usr/local/sbin/kernelmon を kill して、
電源SWを長押しした時に /proc/buffalo/kernevnt に何が出力されるかを見てみる。

root@LS-QVLF42:/etc/init.d# ps | grep /usr/local/sbin/kernelmon
 1749 root       2204 S   /bin/sh /usr/local/sbin/kernelmon
root@LS-QVLF42:/etc/init.d# kill 1749
root@LS-QVLF42:/etc/init.d# !ps
ps | grep /usr/local/sbin/kernelmon
 1749 root       2204 S   /bin/sh /usr/local/sbin/kernelmon
root@LS-QVLF42:/etc/init.d# kill -9 1749
root@LS-QVLF42:/etc/init.d# ps | grep /usr/local/sbin/kernelmon
root@LS-QVLF42:/etc/init.d# cat /proc/buffalo/kernevnt
電源SWを長押しする
PSW_short_pushedroot@LS-QVLF42:/etc/init.d# 
PSW_short_pushed が出力される。 更に押し続けると、
PSW_short_pushedroot@LS-QVLF42:/etc/init.d# cat /proc/buffalo/kernevnt
PSW_pushedroot@LS-QVLF42:/etc/init.d#
PSW_pushed が出力される。
これまでと同じ。

/usr/local/sbin/kernelmon を kill したので、reboot

/usr/local/bin/kernelmon_exec.sh

まず、短押しの時点で、引数として PSW_short_pushed が渡される。
kernelmon_exec.sh は、引数として PSW_short_pushed が渡されても 特に何もしていなさそう。

長押しの時点で、引数として PSW_pushed が渡される。
kernelmon_exec.sh は、引数として PSW_pushed が渡されると、
/proc/buffalo/power_sw が 1 であれば、
/usr/local/bin/shutdown.sh normal
が実行される。

/proc/buffalo/power_sw が 1 かどうかわからないが、 多分1で実行されるであろう。

/usr/local/bin/shutdown.sh

normal が引数に与えられると、 普通に shutdown -h now を実行しているだけ。

ここまで、何な小細工はないように思う。
節穴なだけ?

/etc/init.d/rcDown

/etc/inittab を見ると、
	:
	:
::shutdown:/etc/init.d/rcDown
と書いてあるので、/etc/init.d/rcDown も見てみる。

通常のモードで UPS が繋がっていないときは、
/etc/init.d/shutdown_start.sh stop
/etc/init.d/shutdown_proc.sh stop
/etc/init.d/umount_disk.sh stop
を実行している。

それぞれを見ていく。

/etc/init.d/shutdown_start.sh stop

ここで実行しているのは、
miconapl -a bz_on button
miconapl -a shutdown_wait
ぐらいか。
手動で実行してみる
root@LS-QVLF42:~# miconapl -a bz_on button
err:
root@LS-QVLF42:~#
root@LS-QVLF42:~# miconapl -a shutdown_wait
root@LS-QVLF42:~#
POWER LED が点滅を始めた

/etc/init.d/shutdown_proc.sh stop

/etc/init.d にある各種スクリプト、
/etc/rc.d/extensions.d/ にある K で始まる各種スクリプト、
/etc/rc.d/sysinit.d/ にある K で始まる各種スクリプト、
を stop を引数に実行している。

うーん、多すぎて見きれない。
でも、電源SWは関係無さそう、、、
節穴なだけ?

/etc/init.d/umount_disk.sh stop

umount しているだけで、電源SWは関係無さそう、、、
節穴なだけ?

miconapl?

という訳で、怪しいのは miconapl?
shutdown_wait の中を見てみようとしたが、、、
root@LS-QVLF42:~# file /usr/local/sbin/miconapl
/usr/local/sbin/miconapl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, dynamically linked (uses shared libs), stripped
root@LS-QVLF42:~#
バイナリファイル。

miconapl をハックキットへ持っていく

しかたがないので、バイナリをハックキットへ持っていって 動かしてみる。

必要なファイルは、、、

root@LS-QVLF42:~# ldd /usr/local/sbin/miconapl
        libbuffalo_bin.so => /usr/local/lib/libbuffalo_bin.so (0x40026000)
        libc.so.6 => /lib/libc.so.6 (0x4004a000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x40179000)
        /lib/ld-linux.so.3 (0x40000000)
root@LS-QVLF42:~# ls -l /usr/local/lib/libbuffalo_bin*
lrwxrwxrwx    1 root     root           19 Jul  2  2012 /usr/local/lib/libbuffalo_bin.so -> libbuffalo_bin.so.1*
root@LS-QVLF42:~#
/usr/local/lib/libbuffalo_bin.so, libbuffalo_bin.so.1 も 持って行かないといけなさそう。

ハックキットへ転送

tar+gz でまとめる。

root@LS-QVLF42:/# tar zcvf /tmp/miconapl.tar.gz usr/local/sbin/miconapl usr/local/lib/libbuffalo_bin*
usr/local/sbin/miconapl
usr/local/lib/libbuffalo_bin.so
usr/local/lib/libbuffalo_bin.so.1
root@LS-QVLF42:/# 
ftp で別のマシンに転送
root@LS-QVLF42:/# cd /tmp
root@LS-QVLF42:/tmp# ftp sil
-bash: ftp: command not found
root@LS-QVLF42:/tmp#
しようかと思ったら ftp コマンドがない。
しかたがないので標準ファームのファイル共有領域に置く
root@LS-QVLF42:/tmp# mv miconapl.tar.gz /mnt/disk1/share/
root@LS-QVLF42:/tmp#
このあと、Windowsのエクスプローラで別マシンへ転送。

ハックキット側で展開

root@qvl:/# tar zxvf /tmp/miconapl.tar.gz
usr/local/sbin/miconapl
usr/local/lib/libbuffalo_bin.so
usr/local/lib/libbuffalo_bin.so.1
root@qvl:/#

ハックキットで実行

動かしてみる
root@qvl:/# miconapl -a shutdown_wait
miconapl: error while loading shared libraries: libbuffalo_bin.so: cannot open shared object file: No such file or directory
root@qvl:/# ldconfig
root@qvl:/# miconapl -a shutdown_wait
root@qvl:/#
POWER LED が点滅。

シャットダウンしてみる

root@qvl:/# shutdown -h now
電源が落ちた。再起動してこない。OK!

再起動、miconapl -a shutdown_wait を実行。

今度は電源ボタンの長押し。
こちらも電源が落ちた。

/etc/init.d/miconapl への追加

root@qvl:~# cd
root@qvl:~# cd /etc/init.d/
root@qvl:/etc/init.d# mv miconapl{,.orig}
root@qvl:/etc/init.d# cp miconapl.orig miconapl
root@qvl:/etc/init.d# vi miconapl
	:
root@qvl:/etc/init.d# diff -u miconapl.orig miconapl
--- miconapl.orig       2012-06-17 17:59:26.000000000 +0900
+++ miconapl    2012-07-01 15:46:11.000000000 +0900
@@ -25,7 +25,8 @@
        echo on > $LED/eth
        ;;
   stop)
-       echo on > $LED/power_blink
+       # echo on > $LED/power_blink
+       /usr/local/sbin/miconapl -a shutdown_wait
        ;;
   *)
        echo "Usage: $0 {start|stop}"
root@qvl:/etc/init.d#
電源ボタンを長押しすると、、、落ちた。

done!

そのうちもう少し詳しく調べよう。
今はバイナリをそのまま使う方法で先に進む


ToDo:

◎: 動作確認
○:X を動かす
△:ハックキットに反映する



LS-QVL
バッファローダイレクト
楽天市場
amazon
ドスパラ
livedoor デパート
Yahoo!ショッピング
バリューモア
ムラウチドットコム


ハックキットのインストール(2)
ハックの記録
LinkStation/玄箱 をハックしよう

動作確認

Copyright (C) 2003-2013 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市