2011年4月16日土曜日

softdog / CONFIG_WATCHDOG_NOWAYOUT - 勘違い

nowayout と Magic Close の関係を思いっきり勘違い。先日のエントリでは
何とでも読み取り可。nowayout 指定しても Magic Close はできると思い込
んでた。が、nowayout の方が強いと言うか、nowayout を指定してしまうと
Magic Close すらできない。

drivers/watchdog/softdog.c の中 MODULE_PARM で探すと
soft_margin: int
Watchdog soft_margin in seconds.
(0 < soft_margin < 65536, default=60)
 
nowayout: int
Watchdog cannot be stopped once started
(default= [config WATCHDOG_NOWAYOUT?])
 
soft_noboot: int
Softdog action, set to 1 to ignore reboots, 0 to reboot
noboot でテスト。watchdog プログラムはこんなんに swd.sh と命名して
#!/bin/sh

exec 3> /dev/watchdog
trap "echo 'send V'; echo -n V >&3; exit 0" INT

while :; do
    echo >&3
    sleep 4
done
SIG_INT で止められたら Magic Close。root になってまずは nowayout なし
で Magic Close の場合は
# modprobe softdog soft_margin=10 nowayout=0 soft_noboot=1 # ./swd.sh ^Csend V (しばらく待った後に Ctrl-c) # dmesg | tail ... [ 3010.493992] Software Watchdog Timer: 0.07 initialized. soft_noboot=1 soft_margin=10 sec (nowayout= 0)
Magic Close しない場合は (rmmod しないで引き続き)
# ./swd.sh 
^Z (Ctrl-z)
[1]+  Stopped                 ./swd.sh
# (しばらく - soft_margin で指定した10 秒以上待つ)
# dmesg | tail
...
[ 3010.493992] Software Watchdog Timer: 0.07 initialized. 
    soft_noboot=1 soft_margin=10 sec (nowayout= 0)
[ 3241.819563] SoftDog: Triggered - Reboot ignored.
リブートだけど soft_noboot 指定したのでメッセージだけ。/dev/watchdog
が開きっぱになっているので、続けて
# fg
./swd.sh
^Csend V (Ctrl-c)
# rmmod softdog
次に nowayout 指定すると
# modprobe softdog soft_margin=10 nowayout=1 soft_noboot=1
# ./swd.sh 
^Csend V (Ctrl-c)
# (10 秒以上待って)
# dmesg | tail
...
[ 3757.016487] Software Watchdog Timer: 0.07 initialized. 
    soft_noboot=1 soft_margin=10 sec (nowayout= 1)
[ 3811.572991] SoftDog: Unexpected close, not stopping watchdog!
[ 3821.580111] SoftDog: Triggered - Reboot ignored.
'V' を /dev/watchdog に送ったけどリブート。で最初の通り nowayout 指定
すると Magic Close も何のその。書き込みなくば再起動という結果。

とってもシンプルだけど先の swd.sh は
nohup ./swd.sh > /var/log/watchdog.log 2>&1 &
でソレナリには動くらしい。nowayout 指定せず Magic Close 使ってリブート
せずの停止は
# killall -INT swd.sh
# cat /var/log/swd.log
nohup: ignoring input
send V

0 件のコメント: