LS-GL ハックキット 2.0 電源が落ちない(2)

LS-GL

ファームウェアが 1.11 になったことだし、 Movable Type もバージョンアップしたことだし(ん?) LS-GL にハックキットをきれいにいれ直す。

と、クリーンインストールしたら、 電源ボタン長押しで電源が落ちなくなった。

昨日の続き。

cat /proc/buffalo/miconint_en

/usr/local/bin/kernelmon_exec.sh の micon_interrupts の処理の最後で cat /proc/buffalo/miconint_en を実行していることに気が付いた。
もう一つ TeraTERM を起動、LS-GL にログインし、 cat /proc/buffalo/miconint_en を実行してみた。
ude:/usr/local/bin# cat /proc/buffalo/miconint_en
ude:/usr/local/bin# 
kernelmon を実行しているウィンドウには、

line [micon_interrupts]
/usr/local/bin/kernelmon_exec.sh: line 18: syntax error near unexpected token `fi'
/usr/local/bin/kernelmon_exec.sh: line 18: `fi'

しんたっくすえらー?

kernelmon_exec.sh の修正

kernelmon_exec.sh を見ると、18行目あたりは
if [ -f /etc/melco/info ]; then
        #. /etc/melco/info
fi
if 分の中が空なのでダメなのか。if 分まるごとコメントアウトする。
ude:/usr/local/bin# diff -c kernelmon_exec.sh.orig kernelmon_exec.sh
*** kernelmon_exec.sh.orig      Tue Aug 14 16:54:53 2007
--- kernelmon_exec.sh   Wed Aug 15 09:32:30 2007
***************
*** 3,8 ****
--- 3,10 ----
  # called from kernelmon
  #

+ echo $1 >> /tmp/kernelmon.log
+
  if [ "$1" = "" ]; then
    exit 1
  fi
***************
*** 11,19 ****
  if [ -f /etc/melco/email ]; then
        . /etc/melco/email
  fi
! if [ -f /etc/melco/info ]; then
!       #. /etc/melco/info
! fi

  LOGTAG=kernelmon
  LOGFACILITY=local0.info
--- 13,21 ----
  if [ -f /etc/melco/email ]; then
        . /etc/melco/email
  fi
! #if [ -f /etc/melco/info ]; then
! #     #. /etc/melco/info
! #fi

  LOGTAG=kernelmon
  LOGFACILITY=local0.info
ude:/usr/local/bin#
今度は、
line [micon_interrupts]
/usr/local/bin/kernelmon_exec.sh: line 82: -a: command not found
MIntAct
が延々表示されるようになった。

kernelmon_exec.sh の再修正

kernelmon_exec.sh の 82 行目は、
        int=`$MICONAPL -a int_get_switch_status |grep "int=" |sed -e "s/int=//"`
MICONAPL が未定義。直接書く
ude:/usr/local/bin# !diff
diff -c kernelmon_exec.sh.orig kernelmon_exec.sh
*** kernelmon_exec.sh.orig      Tue Aug 14 16:54:53 2007
--- kernelmon_exec.sh   Wed Aug 15 09:36:30 2007
***************
*** 3,8 ****
--- 3,10 ----
  # called from kernelmon
  #

+ echo $1 >> /tmp/kernelmon.log
+
  if [ "$1" = "" ]; then
    exit 1
  fi
***************
*** 11,19 ****
  if [ -f /etc/melco/email ]; then
        . /etc/melco/email
  fi
! if [ -f /etc/melco/info ]; then
!       #. /etc/melco/info
! fi

  LOGTAG=kernelmon
  LOGFACILITY=local0.info
--- 13,21 ----
  if [ -f /etc/melco/email ]; then
        . /etc/melco/email
  fi
! #if [ -f /etc/melco/info ]; then
! #     #. /etc/melco/info
! #fi

  LOGTAG=kernelmon
  LOGFACILITY=local0.info
***************
*** 77,83 ****


  micon_interrupts)
!       int=`$MICONAPL -a int_get_switch_status |grep "int=" |sed -e "s/int=//"`
        ##echo "miconint = ($int)"  >/dev/console
        case $int in
        power_sw)
--- 79,85 ----


  micon_interrupts)
!       int=`/usr/local/sbin/miconapl -a int_get_switch_status |grep "int=" |sed -e "s/int=//"`
        ##echo "miconint = ($int)"  >/dev/console
        case $int in
        power_sw)
ude:/usr/local/bin#
この修正で、ようやく電源ボタンによる電源 OFF ができるようになった。

考察

kernelmon_exec.sh は標準ファームの kernelmon_exec.sh を sed で書き換えて使用している。
1.11 の kernelmon_exec.sh は何か変ったのであろう。 後日調査要。
kernelmon_exec.sh が syntax error で途中で止まり、 cat /proc/buffalo/miconint_en が実行されなかったため、 次の micon_interrupts が発行されなくなった。

後片づけ

/usr/local/sbin/kernelmon を元に戻す

ude:~# cd /usr/local/sbin/
ude:/usr/local/sbin# ls
fancontrol  kernelmon  kernelmon.orig  miconapl  mkimage
ude:/usr/local/sbin# mv kernelmon.orig kernelmon
ude:/usr/local/sbin#

/usr/local/bin/kernelmon_exec.sh のデバッグ echo を消す

ude:/usr/local/sbin# cd ../bin
ude:/usr/local/bin# vi kernelmon_exec.sh
	:
	:
ude:/usr/local/bin# diff -c kernelmon_exec.sh.orig kernelmon_exec.sh
*** kernelmon_exec.sh.orig      Tue Aug 14 16:54:53 2007
--- kernelmon_exec.sh   Wed Aug 15 09:44:55 2007
***************
*** 11,19 ****
  if [ -f /etc/melco/email ]; then
        . /etc/melco/email
  fi
! if [ -f /etc/melco/info ]; then
!       #. /etc/melco/info
! fi

  LOGTAG=kernelmon
  LOGFACILITY=local0.info
--- 11,19 ----
  if [ -f /etc/melco/email ]; then
        . /etc/melco/email
  fi
! #if [ -f /etc/melco/info ]; then
! #     #. /etc/melco/info
! #fi

  LOGTAG=kernelmon
  LOGFACILITY=local0.info
***************
*** 77,83 ****


  micon_interrupts)
!       int=`$MICONAPL -a int_get_switch_status |grep "int=" |sed -e "s/int=//"`
        ##echo "miconint = ($int)"  >/dev/console
        case $int in
        power_sw)
--- 77,83 ----


  micon_interrupts)
!       int=`/usr/local/sbin/miconapl -a int_get_switch_status |grep "int=" |sed -e "s/int=//"`
        ##echo "miconint = ($int)"  >/dev/console
        case $int in
        power_sw)
ude:/usr/local/bin#

宿題

・killall のインストール
・1.11 の kernelmon_exec.sh を書き換えても動くインストーラ


LS-160GL
楽天市場
Amazon
Yahoo!ショッピング
ソフマップ
ツクモネットショプ
livedoor デパート
ドスパラ


LS-GL ハックキット 2.0 電源が落ちない
ハックの記録
LinkStation/玄箱 をハックしよう

LS-GL ハックキット 2.0 パッケージのアップデート

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