電源SWでシャットダウン

Debian TS-WXL

次は、電源スイッチで電源を落とせるようにする。
多分 SoftwareDesign 2010/2 P145 リスト3のスクリプトがそのまま使える。

カーネルイベントの確認

念のため、HS-DHGL 等と同じであることを確認する。
tswxl:~# cat /proc/buffalo/kernevnt
SATA 0 pluggedtswxl:~#
tswxl:~# cat /proc/buffalo/kernevnt
SATA 1 unpluggedtswxl:~#
tswxl:~# cat /proc/buffalo/kernevnt
SATA 2 unpluggedtswxl:~#
tswxl:~# cat /proc/buffalo/kernevnt
SATA 3 unpluggedtswxl:~#
tswxl:~# cat /proc/buffalo/kernevnt
lanact 0 full eth0tswxl:~#
tswxl:~# cat /proc/buffalo/kernevnt
lanact 1000 full eth0tswxl:~#
tswxl:~# cat /proc/buffalo/kernevnt
tswxl:~# /usr/local/sbin/miconapl -a int_get_switch_status
#[miconapl.int_get_switch_status]
int=unknown
tswxl:~# /usr/local/sbin/miconapl -a int_get_switch_status
#[miconapl.int_get_switch_status]
int=unknown
tswxl:~# /usr/local/sbin/miconapl -a int_get_switch_status
#[miconapl.int_get_switch_status]
int=power_sw
tswxl:~#
一緒

スクリプトの作成

多分 SoftwareDesign 2010/2 P145 リスト3のスクリプト、そのまま
tswxl:~# cat > /usr/local/sbin/kernelmon
#!/bin/sh

while :
do
        LINE=`cat /proc/buffalo/kernevnt`
        if [ "$LINE" = micon_interrupts ]
        then
                case `/usr/local/sbin/miconapl -a int_get_switch_status | sed -n -e 's/int=//p'` in
                power_sw)
                        shutdown -h now
                        ;;
                *)
                        ;;
                esac
        fi
done
tswxl:~#
手動で実行し、電源SWを長押ししてシャットダウンが走ることを確認する。
tswxl:~# sh /usr/local/sbin/kernelmon
(電源ボタンを長押しする)
INIT:BuffaloGpio_ChangePowerStatus > Writing 0x02
Stopping internet superserver: inetd.
Saving the system clock.
Cannot access the Hardware Clock via any known method.
Use the --debug option to see the details of our search for an access method.
Stopping enhanced syslogd: rsyslogd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
Deconfiguring network interfaces...eth0: stopped
done.
Cleaning up ifupdown....
Deactivating swap...done.
Unmounting local filesystems...done.
Will now halt.
md: stopping all md devices.
md: md1 still in use.
md: md10 switched to read-only mode.
md: md0 switched to read-only mode.
sd 0:0:0:0: [sda] Synchronizing SCSI cache
^ESystem halted.
BuffaloChangePowerStatusBeforeHalt > Check power status. MagicKey = 0x02
BuffaloGpio_ChangePowerStatus > Writing 0x7a
BuffaloChangePowerStatusBeforeHalt > Changed to 0x7a from 0x02
>miconCntl_PowerOff
>miconCntl_ShutdownWait

電源SW監視スクリプトの自動起動

再度起動し、 SoftwareDesign 2010/2 P147 リスト5の /etc/init.d/kernelmon を 作成し、自動実行の設定(図14)をおこなう。
tswxl:~# cat > /etc/init.d/kernelmon
#!/bin/sh

case "$1" in
start)
        if [ -e /proc/buffalo/gpio/switch/sw_control ]
        then
                echo on > /proc/buffalo/gpio/switch/sw_control
        fi
        /usr/local/sbin/kernelmon &
        ;;
stop)
        ;;
*)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

exit 0
tswxl:~# chmod +x /usr/local/sbin/kernelmon
tswxl:~# chmod +x /etc/init.d/kernelmon
tswxl:~# ln -s ../init.d/kernelmon /etc/rcS.d/S81kernelmon
tswxl:~#

確認

tswxl:~# /etc/rcS.d/S81kernelmon start
tswxl:~#
電源ボタンを長押しする
INIT: SendinBuffaloGpio_ChangePowerStatus > Writing 0x02
Stopping internet superserver: inetd.
Saving the system clock.
Cannot access the Hardware Clock via any known method.
Use the --debug option to see the details of our search for an access method.
Stopping enhanced syslogd: rsyslogd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
Deconfiguring network interfaces...eth0: stopped
done.
Cleaning up ifupdown....
Deactivating swap...done.
Unmounting local filesystems...done.
Will now halt.
md: stopping all md devices.
md: md1 still in use.
md: md10 switched to read-only mode.
md: md0 switched to read-only mode.
sd 0:0:0:0: [sda] Synchronizing SCSI cache
System halted.
BuffaloChangePowerStatusBeforeHalt > Check power status. MagicKey = 0x02
BuffaloGpio_ChangePowerStatus > Writing 0x7a
BuffaloChangePowerStatusBeforeHalt > Changed to 0x7a from 0x02
>miconCntl_PowerOff
>miconCntl_ShutdownWait
無事落ちたが、「ぴっ」といって欲しいな。

シャットダウンに「ぴっ」と鳴す

電源ボタンを長押ししてシャットダウンするときに「ぴっ」というように、 /etc/init.d/miconapl を修正し、 /usr/local/sbin/miconapl -a bz_on button を追加する。
tswxl:~# cat /etc/init.d/miconapl
#!/bin/sh

[ -f /usr/local/sbin/miconapl ] || exit 0

case "$1" in
  start)
        ldconfig
        /usr/local/sbin/miconapl -b -a boot_flash_ok
        /usr/local/sbin/miconapl -a boot_end
        /usr/local/sbin/miconapl -a serialmode_console
        ;;
  stop)
        /usr/local/sbin/miconapl -a bz_on button
        /usr/local/sbin/miconapl -a shutdown_wait
        /usr/local/sbin/miconapl -a lcd_set_dispitem off
        /usr/local/sbin/miconapl -a led_set_cpu_mcon off
        /usr/local/sbin/miconapl -a led_set_on_off off
        /usr/local/sbin/miconapl -a led_set_brink off
        ;;
  *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

exit 0

tswxl:~#
電源ボタンを長押しし、「ぴっ」といってから落ちることを確認する。

TS-WXL
楽天市場
amazon
Yahoo ショッピング
Livedoor デパート


初期化/終了スクリプト
ハックの記録
LinkStation/玄箱 をハックしよう

ファンコントロール

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