PowerPC 系の LinkStation?/玄箱/TeraStation? に Debian/Squeeze をインストールする。

kernel オプションの確認

Squeeze では udev のしくみが変わり(?)、kernel のコンフィグで CONFIG_SYSFS_DEPRECATED を N にしないと起動途中で止まってしまう。

その他に、CONFIG_SIGNALFD と CONFIG_INOTIFY_USER を有効にすること。

# General setup
# CONFIG_SYSFS_DEPRECATED is not set ※無効
CONFIG_SIGNALFD=y ※有効
# File systems
CONFIG_INOTIFY_USER=y ※有効

U-Boot + TFTP

U-Boot + TFTP を利用する方法は、2010-05-20現在、Squeezeでは使えなかった。インストーラ起動中に steal-ctty なんとかとか表示されて、インストール画面にたどり着けない。

U-Boot

LS-HGLAN, KuroBoxHG

LinkStation? HG や 玄箱 HG では最新の 2010.03 バージョンの U-Boot が使えるので、DTB に対応している。ただし、1.2.0 と DTC のバージョンが違うので、以前 V=16 オプションを指定して作成した DTB ファイルは作成しなおす必要あり。
2ちゃんねる 玄人志向「玄箱」で自宅サーバ Part13

317 :DNS未登録さん:2009/05/06(水) 12:30:30 ID:???
    玄箱HGを使ってるんだが、Das U-Bootの最新版にしてみた。
    ftp://ftp.denx.de/pub/u-boot/u-boot-2009.03.tar.bz2
    展開して、中で
    $ make linkstation_HGLAN_config
    $ make
    $ sudo dd if=u-boot.bin of=/dev/mtdblock1 bs=1k
    ここで再起動すると、U-Bootがカーネルを起動するときに、/chosenのバージョンがおかしい(FDT_ERR_BADVERSION)って言われた。
    arch/powerpc/boot/dtcで-V 16つけてた人は、dtbを作り直す。
    $ arch/powerpc/boot/dtc -f -I dts -O dtb -o /tmp/kuroboxHG.dtb arch/powerpc/boot/dts/kuroboxHG.dts
    あとはuImageとkuroboxHG.dtbを/bootに入れてreboot。
    いまは2.6.29.2で使ってる。 

LS-HGLAN V2

HGLAN V2 では、フラッシュROMの関係で、u-Bootを 1.2.0 までしかバージョンを上げていないので、DTB は V=16 を指定して作成したものを使用している。詳しくは、HGLAN V2を参照のこと。

LS-HDLAN, KuroBox?

U-Boot 2009.03 に パッチを当てたものが動いた。環境変数は以下の通り。

printenv
bootcmd=run bootcmd1
nfsboot=bootp;run nfsargs;bootm
bootdelay=10
baudrate=57600
autoload=no
stdin=serial
stdout=serial
stderr=serial
ipaddr=192.168.11.150
netmask=255.255.255.0
serverip=192.168.11.149
ncip=192.168.11.149
netretry=no
nc=setenv stdin nc;setenv stdout nc;setenv stderr nc
ser=setenv stdin serial;setenv stdout serial;setenv stderr serial
ldaddr=800000
hdpart=0:1
hdboot=run hdload;run boothd
flboot=setenv bootargs root=/dev/hda1;bootm ffc00000
emboot=setenv bootargs root=/dev/ram0;bootm ffc00000
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
bootretry=30
bootcmd1=run hdboot;run flboot
bootcmd2=run flboot
bootcmd3=run emboot
writeng=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4e474e47 1;cp.b 800000 fff70000 4
writeok=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4f4b4f4b 1;cp.b 800000 fff70000 4
ubpart=0:3
ubfile=share/u-boot/u-boot-hd.flash.bin
ubload=echo Loading ${ubpart}:${ubfile};ext2load ide ${ubpart} ${ldaddr} ${ubfile}
ubsaddr=fff00000
ubeaddr=fff2ffff
ubflash=protect off ${ubsaddr} ${ubeaddr};era ${ubsaddr} ${ubeaddr};cp.b ${ldaddr} ${ubsaddr} ${filesize};cmp.b ${ldaddr} ${ubsaddr} ${filesize}
upgrade=run ubload ubflash
ethact=COMET#0
hdfile=uImage
kernel=uImage
dtb=kuroboxHD.dtb
kernel_addr=0x00800000
dtb_addr=0x007F0000
hd_kernel_load=echo Loading ${hdpart}:${kernel};ext2load ide ${hdpart} ${kernel_addr} ${kernel}
hdload=run hd_kernel_load hd_dtb_load
boothd=setenv bootargs root=/dev/sda3 ${bootargs_base};bootm ${kernel_addr} - ${dtb_addr}
filesize=1D1F74
hd_dtb_load=Loading ${hdpart}:${dtb};ext2load ide ${hdpart} ${dtb_addr} ${dtb}
bootargs=root=/dev/sda3 console=ttyS1,57600 mtdparts=physmap-flash.0:0x300000(firming),0x70000(loader),0x10000(status),0x80000(loader-env)
bootargs_base=console=ttyS1,57600 mtdparts=physmap-flash.0:0x300000(firmimg),0x70000(loader),0x10000(status),0x80000(loader-env)

Environment size: 1979/65532 bytes

kuroevtd

オリジナルソースは、genbakoさんのサイト

玄箱HGのハードウェア情報 2.6.28メモ(オリジナルは2ch)によると、kernel-2.6.28 から /dev/ttyS0 と /dev/ttyS1 が入れ替わってしまうので、/dev/ttyS0 で AVR を制御するバージョンも作っておく。

$ diff -Nur kuroevtd.c.orig kuroevtd.c
--- kuroevtd.c.orig	2011-06-07 14:55:32.763379979 +0900
+++ kuroevtd.c	2011-06-07 15:10:27.723026165 +0900
@@ -6,13 +6,15 @@
 #include <signal.h>
 #include <unistd.h>
 #include <time.h>
+#include <strings.h>
+#include <stdlib.h>
 
 #ifndef NOLOG
 #include <syslog.h>
 #endif /* NOLOG */
 
 #define BAUDRATE	 B9600
-#define DEVICE		"/dev/ttyS1"
+#define DEVICE		"/dev/ttyS0"
 #define EVT_POWER_DOWN	"/etc/kuroevtd/powerdown"
 #define EVT_POWER_UP	"/etc/kuroevtd/powerup"
 #define EVT_POWER_PRESS "/etc/kuroevtd/powerpress"

クロスコンパイルの例。

$ rm kuroevtd 		←念のため、バイナリファイルを削除しておく。
$ powerpc-linux-gnu-gcc -o kuroevtd kuroevtd.c
$ ls -al kuroevtd
-rwxr-xr-x 1 hogehoge hogehoge 9396 2011-06-07 18:42 kuroevtd
$ powerpc-linux-gnu-strip -p kuroevtd
$ ls -al kuroevtd
-rwxr-xr-x 1 hogehoge hogehoge 6800 2011-06-07 18:42 kuroevtd

各ボタンが押されたり、離されたときに呼ばれるスクリプト中で /dev/ttyS1 が使われている箇所 を修正する。

$ tar zxvf etc-kuroevtd.tgz
$ grep -lr "ttyS1" etc/kuroevtd/* | xargs sed -i 's/ttyS1/ttyS0/g'

電源スイッチが押された時にシャットダウンするようにする。

  • etc/kuroevtd/powerpress
    #! /bin/sh
    echo -n "EEEE" > /dev/ttyS0
    shutdown -h now

後は、以下のリンクを参考にして、適当に機能を設定すればよい。

debootstrap によるイメージ作成

U-Boot + TFTP がうまく動かなかったので、Lennyが動いているマシン上で debootstrap を使って Squeeze のイメージを作成した。

# mkdir debroot
# debootstrap --arch=powerpc  squeeze debroot http://ftp.jp.debian.org/debian

後処理

カーネル・モジュール等

LinkStation/TeraStation/玄箱/PPC/kernelからビルドしたカーネルとモジュールをダウンロードして、debootstrap で作成したディレクトリに展開する。

# tar jxvf kernel-2.6.39-LS-PPC.tar.bz2 -C debroot/boot
# tar jxvf modules-2.6.39-LS-PPC.tar.bz2 -C debroot

Debian由来でない LinkStation?/TeraStation?/玄箱 独自のファイル

/etc/init.d/ 配下のスクリプトの LSB 4.0 対応

Squeeze では、/etc/init.d/ 配下のスクリプトを起動する際に、inkStation/TeraStation?/玄箱 独自のファイルでは以下の警告が表示されるようになった。

insserv: warning: script 'K01kuro_boot' missing LSB tags and overrides
insserv: warning: script 'K01kuroevtd' missing LSB tags and overrides
insserv: warning: script 'kuro_boot' missing LSB tags and overrides
insserv: warning: script 'kuroevtd' missing LSB tags and overrides

これは、起動スクリプトが LSB(Linux Standard Base)の基準を満たしていないのが原因。

詳しくは、LSBInitScripts/DependencyBasedBoot - Debian Wikiとか、LSBInitScripts - Debian Wikiとか、insservによる起動スクリプト再配置の順序の制御 - masakiの雑記帳を参照のこと。

それに伴い、スクリプトの登録で使用されるコマンドも update-rc.d から insserv に変更されている。

  • /etc/init.d/kuroevtd
    #!/bin/sh
    
    ### BEGIN INIT INFO
    # Provides:        kuroevtd 
    # Required-Start:  $network $remote_fs $syslog
    # Required-Stop:   $network $remote_fs $syslog
    # Default-Start:   2 4 5
    # Default-Stop:    0 1 3 6
    # Short-Description: Start/stop the KURO-BOX Event daemon
    ### END INIT INFO
    
    DAEMON=/usr/sbin/kuroevtd
    
    test -f $DAEMON || exit 0
    
    case "$1" in
    start)	echo -n "Starting KURO-BOX event daemon: kuroevtd"
            start-stop-daemon --start --quiet --exec $DAEMON
            echo "." 
    	;;
    stop)	echo -n "Stopping KURO-BOX event daemon: kuroevtd"
            start-stop-daemon --stop --quiet --exec $DAEMON
            echo "."
            ;;
    restart) echo -n "Restarting KURO-BOX event daemon: kuroevtd"
            start-stop-daemon --stop --quiet --exec $DAEMON
            start-stop-daemon --start --quiet --exec $DAEMON
            echo "."
            ;;
    reload|force-reload) echo -n "Reloading configuration files for KURO-BOX event daemon: kuroevtd"
    	# kuroevtd reloads automatically
            echo "."
            ;;
    *)	echo "Usage: /etc/init.d/kuroevtd start|stop|restart|reload|force-reload"
            exit 1 
            ;;
    esac
    exit 0
    
  • /etc/init.d/kuro_boot
    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          kuro_boot
    # Required-Start:    $remote_fs $all
    # Required-Stop: 
    # Default-Start:     2 4 5
    # Default-Stop:      0 1 3 6
    # Short-Description: Initialize the KUROBOX AVAR
    ### END INIT INFO
    
    case "$1" in
    start|force-reload|restart|reload)
      echo -n "ttyS0 port init : "
    stty -F /dev/ttyS0 10:1:9f0d:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
      echo -n "AVR init string send"
    echo -n "AAAAFFFFJJJJ>>>>VVVV>>>>ZZZZVVVVKKKK" > /dev/ttyS0
      echo "."
      ;;
    stop)
      ;;
    *)
      echo "Usage: /etc/init.d/$0 {start|stop|restart|reload|force-reload}"
      exit 1
    esac
    
    exit 0
    

上記2つのファイルをダウンロードして、デーモンを登録する。

# tar zxvf kuroevtd-ttyS0.tar.gz -C debroot
# cp kuro_boot.tar.gz debroot/etc/init.d
# chroot debroot
# insserv kuroevtd
# insserv kuro_boot
# exit
* リンク

シリアルコンソールと AVR 関係

玄箱HGのハードウェア情報 2.6.28メモ(オリジナルは2ch)によると、kernel-2.6.28 から /dev/ttyS0 と /dev/ttyS1 が入れ替わっているので、古い情報を参考にする場合は注意が必要。

  • 2.6.28 以降
    シリアルコンソール:	/dev/ttyS1
    AVR:			/dev/ttyS0
  • 2.6.28 より前
    シリアルコンソール:	/dev/ttyS0
    AVR:			/dev/ttyS1

/etc/inittab

インストールした debroot ディレクトリを root ディレクトリとして、以下のようにファイルを編集をする。以下、同様。

# vi debroot/etc/inittab

シリアルコンソールでログインできるように/etc/inittabに以下の行を追加する。

con:2345:respawn:/sbin/getty 57600 ttyS1

/etc/securettyに/dev/ttyS1が含まれていることを確認。

# cat debroot/etc/securetty | grep ttyS1
ttyS1
#...ttyS191

/etc/init.d/halt

/etc/init.d/halt から /etc/default/halt が呼ばれるようになったので、AVRへのコマンド発行を /etc/init.d/halt に追加する。

* /etc/default/halt
# Default behaviour of shutdown -h / halt. Set to "halt" or "poweroff".
HALT=poweroff

# KURO-BOX AVR force shutdown
echo -n "EEEE" > /dev/ttyS0

/etc/init.d/reboot

/etc/init.d/reboot には /etc/default/reboot を呼ぶルーチンは入っていないが、halt と同様の仕組みを入れておく。具体的には、赤字の部分を追加する。

PATH=/sbin:/usr/sbin:/bin:/usr/bin

[ -f /etc/default/reboot ] && . /etc/default/reboot

. /lib/lsb/init-functions

さらに、/etc/default/reboot ファイルを以下の内容で作成する。

* /etc/default/reboot
# KURO-BOX AVR force reboot
echo -n "CCCC" > /dev/ttyS0

/etc/apt/sources.list

例えば、以下のように書き換える。

deb http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free
deb-src http://security.debian.org squeeze/updates main contrib non-free

/etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/sda3       /               ext3    errors=remount-ro 0     1
/dev/sda1       /boot           ext3    defaults        0       2
/dev/sda2       none            swap    sw              0       0

U-Boot の設定

LS-HGLAN, KuroBoxHG

HDDからの起動は、hdboot=run hdload boothd と指定されているので、DTBを利用して起動するように、以下のように環境変数を変更する。

bootargs_base=console=ttyS1,57600 mtdparts=physmap-flash.0:0x300000(firmimg),0x70000(loader),0x10000(status),0x80000(loader-env)
kernel=uImage.buffalo.lsppc
dtb=kuroboxHG.dtb
kernel_addr=0x00800000
dtb_addr=0x007F0000
hd_kernel_load=echo Loading ${hdpart}:${kernel};ext2load ide ${hdpart} ${kernel_addr} ${kernel}
hd_dtb_load=echo Loading ${hdpart}:${dtb};ext2load ide ${hdpart} ${dtb_addr} ${dtb}
hdload=run hd_kernel_load hd_dtb_load
boothd=setenv bootargs root=/dev/sda3 ${bootargs_base};bootm ${kernel_addr} - ${dtb_addr}

HG-LAN V2

HG-LAN V2 では、フラッシュROMの関係で、u-Bootを 1.2.0 までしかバージョンを上げていないので、DTB は V=16 を指定して作成したものを使用する。

dtb=kuroboxHG.V16.dtb

リンク


添付ファイル: filekuro_boot 646件 [詳細] filekuroevtd-ttyS0.tar.gz 535件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-06-09 (木) 16:50:36 (1850d)