HS-DHGLをDebian化 (4)

参考URL:LinkStation/玄箱をハックしよう

固有コマンドのDebian環境に移植する。

miconapl の実行環境を作成する

libcのバージョンが合わないため、/usr/local/buffalo/ に閉じ込めて実行。
リンクするオブジェクトファイルと各種デバイスにアクセスするのでデバイスファイル(ttyS1)も必要。
閉じ込めたmiconaplを外から実行させるスクリプトも作成する。

ちなみに ldd /usr/local/sbin/miconapl の結果は以下のとおり

    libc.so.6 => /lib/libc.so.6 (0x40020000)
    /lib/ld-linux.so.3 (0x40000000)

以下のコマンドを実行する。

# cd /mnt/disk1/debian_etch/usr/local/
# mkdir -p buffalo/{sbin,dev,lib,var/lock}
# cd buffalo
# cp /usr/local/sbin/miconapl sbin/
# cp /lib/{libc.so.6,libc-2.3.6.so} lib/
# cp /lib/{ld-linux.so.3,ld-2.3.6.so} lib/
# mknod dev/ttyS1 c 4 65
# echo -e '#!/bin/sh\nchroot /usr/local/buffalo/ /sbin/miconapl $*' > sbin/miconapl
# chmod +x sbin/miconapl

電源ボタン管理用(kernelmon)

標準ファームへに依存してるとことログ関係をコメントアウト
電源オフを shutdown.sh から halt コマンドに変更。

以下のコマンドを実行する。

# cd /mnt/disk1/debian_etch/
# cp /etc/init.d/kernelmon.sh etc/init.d/kernelmon
# cp /usr/local/sbin/kernelmon usr/local/sbin/
# cp /usr/local/bin/kernelmon_exec.sh usr/local/bin/
# perl -pi -e 's/(\. \/|logger)/# \1/; s|[/a-z]+shutdown.sh.*$|sync;halt|' \
   etc/init.d/kernelmon usr/local/bin/kernelmon_exec.sh

一応
diff -u /etc/init.d/kernelmon.sh etc/init.d/kernelmon と
diff -u /usr/local/sbin/kernelmon_exec.sh usr/local/bin/kernelmon_exec.sh
の結果は以下のとおり

--- /etc/init.d/kernelmon.sh    2006-06-08 20:54:19.000000000 +0900
+++ etc/init.d/kernelmon        2007-10-20 00:23:27.408718000 +0900
@@ -1,7 +1,7 @@
 #!/bin/sh
 # processname: kernelmon

-. /etc/init.d/logtag
+# . /etc/init.d/logtag

 if ! [ -x /usr/local/sbin/kernelmon ]; then
     exit 0
@@ -11,7 +11,7 @@
 {
        echo -n "Starting kernelmon:"
        /usr/local/sbin/kernelmon &
-        logger -t ${LOGTAG} -p ${LOGFACILITY} 'Started kernelmon'
+        # logger -t ${LOGTAG} -p ${LOGFACILITY} 'Started kernelmon'
 }

 stop()

--- /usr/local/bin/kernelmon_exec.sh    2006-10-19 17:41:45.000000000 +0900
+++ usr/local/bin/kernelmon_exec.sh     2007-10-20 06:39:28.158718000 +0900
@@ -5,7 +5,7 @@

 MICONAPL=/usr/local/sbin/miconapl

-. /usr/local/bin/libbuffalo
+# ./usr/local/bin/libbuffalo

 if [ "$1" = "" ]; then
   exit 1
@@ -61,7 +61,7 @@
                        ;;
                esac

-               . /etc/melco/info
+               # ./etc/melco/info

                if [ "$my_ipaddress" = "dhcp" ] && [ $2 -ne 0 ] && [ -f /var/tmp/bootcomplete ]; then
                        # go background
@@ -77,7 +77,7 @@
        ##echo "miconint = ($int)"  >/dev/console
        case $int in
        power_sw)
-               /usr/local/bin/shutdown.sh normal
+               sync;halt
                ;;
        lcd_sw)
 #              echo sense lcd switch pushed
@@ -103,7 +103,7 @@
  ;;
 enetover)
        echo "re-up enet"
-       logger -t linktation -p user.info "enetover: re-up enet"
+       # logger -t linktation -p user.info "enetover: re-up enet"
        /etc/init.d/networking.sh restart
        ;;
 esac

起動時/終了時の処理

/mnt/disk1/debian_etch/etc/init.d/miconapl を以下の内容で作成する。

#!/bin/sh

MICONAPL=/usr/local/sbin/miconapl

[ -x $MICONAPL ] || exit 0

case "$1" in
  start)
	$MICONAPL -b -a boot_flash_ok
	$MICONAPL -a boot_end
	;;
  stop)
	$MICONAPL -a shutdown_wait
	;;
  *)
	echo "Usage: $0 {start|stop}"
	exit 1
esac

そして、以下のコマンドを実行する。

# chroot /mnt/disk1/debian_etch
# chmod +x /etc/init.d/miconapl 
# update-rc.d miconapl start 80 S . stop 10 0 6 .
# update-rc.d kernelmon start 81 S .
# exit