玄箱の ramdisk.image


ramdisk.image がどれだけ変わったのかを見てみる

取り出しプログラム作成

firmimg.bin もしくは /dev/fl1 から、
  • ヘッダ情報
  • vmlinux.gz
  • ramdisk.image.gz
    を取り出すプログラムを書いた。
    これまで od やら tail やらを使って手作業/手計算で取り出していたが、 これで楽になった。

    ramdisk image の取り出し

    1.00 では /dev/fl1 から
    1.02 では、添付の firmimg.bin から
    それぞれ ramdisk.image.gz を取り出し、 loop デバイスとしてマウントして、中身を取り出した。

    なくなったファイル

    sbin/mel_shutdown がなくなった。

    変更になったファイル

    /bin/ash
    /bin/bash (-> /bin/ash)
    /bin/setifmac
    /bin/sh (-> /bin/ash)
    /bin/tar
    /bin/unzip
    
    /lib/libls.so (-> libls.so.1.0.1)
    /lib/libls.so.1.0.1
    /lib/libutil-2.2.3.so
    /lib/libutil.so.1 (-> libutil-2.2.3.so)
    
    /lib/security/pam_env.so
    /lib/security/pam_nologin.so
    /lib/security/pam_securetty.so
    /lib/security/pam_unix.so
    /lib/security/pam_unix_acct.so (-> pam_unix.so)
    /lib/security/pam_unix_auth.so (-> pam_unix.so)
    /lib/security/pam_unix_passwd.so (-> pam_unix.so)
    /lib/security/pam_unix_session.so (-> pam_unix.so)
    
    /sbin/e2fsck
    /sbin/fsck
    /sbin/fsck.ext2 (-> e2fsck)
    /sbin/fsck.ext3 (-> e2fsck)
    /sbin/getty
    /sbin/halt
    /sbin/ifconfig
    /sbin/killall
    /sbin/mke2fs
    /sbin/mkfs
    /sbin/mkfs.ext2 (-> mke2fs)
    /sbin/poweroff (-> halt)
    /sbin/reboot (-> halt)
    /sbin/shutdown
    /sbin/start-stop-daemon
    /sbin/tune2fs
    
    /usr/bin/env
    /usr/bin/write_ng (-> write_ok)
    /usr/bin/write_ok
    
    /usr/lib/telnetlogin
    
    /usr/sbin/ap_servd
    /usr/sbin/in.ftpd
    /usr/sbin/in.telnetd
    /usr/sbin/ppc_uartd
    
    diff -rc 1.00/www/script/melsub_shutdown.sh 1.02/www/script/melsub_shutdown.sh
    *** 1.00/www/script/melsub_shutdown.sh  2003-04-15 16:49:46.000000000 +0900
    --- 1.02/www/script/melsub_shutdown.sh  2004-03-18 11:32:01.000000000 +0900
    ***************
    *** 12,20 ****
      ### REBOOT ###
      if [ "$1" -eq 1 ] ; then
    
    -       ### AVR ###
    -       echo -n "CCCC" > /dev/ttyS1
    -
            ### SYSTEM ###
            /sbin/reboot
    
    --- 12,17 ----
    ***************
    *** 22,30 ****
      ### SHUTDOWN ###
      elif [ "$1" -eq 2 ] ; then
    
    -       ### AVR ###
    -       echo -n "EEEE" > /dev/ttyS1
    -
            ### SYSTEM ###
            /sbin/shutdown -h now
    
    --- 19,24 ----
    
    
    diff -rc 1.00/www/script/melsub_shutdown2.sh 1.02/www/script/melsub_shutdown2.sh
    *** 1.00/www/script/melsub_shutdown2.sh 2003-04-15 16:49:46.000000000 +0900
    --- 1.02/www/script/melsub_shutdown2.sh 2004-03-18 11:32:01.000000000 +0900
    ***************
    *** 12,20 ****
      ### REBOOT ###
      if [ "$1" -eq 1 ] ; then
    
    -       ### AVR ###
    -       echo -n "CCCC" > /dev/ttyS1
    -
            ### SYSTEM ###
            /sbin/reboot
    
    --- 12,17 ----
    ***************
    *** 22,30 ****
      ### SHUTDOWN ###
      elif [ "$1" -eq 2 ] ; then
    
    -       ### AVR ###
    -       echo -n "EEEE" > /dev/ttyS1
    -
            ### SYSTEM ###
            /sbin/shutdown -h now
    
    --- 19,24 ----
    
    よくわからない ^_^;

    電源制御

    興味深いのは、
  • melsub_shutdown.sh, melsub_shutdown2.sh
  • halt
    あたり。

    1.00 では、/sbin/reboot,/sbin/shutdown 実行前に AVR にコマンドを送っていたが、これがなくなり、 さらに /sbin/halt, /sbin/shutdown も変更されている。

    halt, shutdown 内で AVR へコマンドを送るようになったかと、 strings halt をしてみると、

    /bin/echo -n "CCCC" > /dev/ttyS1
    
    が見えた。
    strings shutdown すると、こちらにも
    /bin/echo -n "EEEE" > /dev/ttyS1
    /bin/echo -n "CCCC" > /dev/ttyS1
    
    が見えた。
    予想通り。

    これは、アップデータの readme.txt にある

    ・shutdownコマンドでシャットダウンできれるようにしました。
    ・rebootコマンドで再起動ができるようにしました。
    
    に対応するものと考えられる。

    なお、上記 AVR へコマンドを送っているところ、 多分 system() への引数なんでしょうが、 こんなところに、system() 使うのって、あんまり好きじゃないなぁ。

    実機確認(KURO-BOX-EM)

    パーティションがない HDD を接続して玄箱を起動、 KURO-BOX-EM にログインし、
    # shutdown -h now
    
    を実行する。問題なく、電源 OFF された。

    実機確認(KURO-BOX)

    今度は、ファームウェア 1.02 をインストールした HDD を接続して玄箱を起動、 KURO-BOX にログインし、
    # shutdown -h now
    
    を実行する。こちらも問題なく、電源 OFF された。
    LinkStation/玄箱 をハックしよう → HLAN のファームウェアアップデート

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