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

kernel オプションの確認

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

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

#pre{{
# 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

#pre{{
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 に パッチを当てたものが動いた。環境変数は以下の通り。

pre> 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

/pre>

kuroevtd

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

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

#pre{{
$ 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"
}} クロスコンパイルの例。

pre> $ 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

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

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

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

    • etc/kuroevtd/powerpress

      pre>

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

      /pre>

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

debootstrap によるイメージ作成

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

pre>

# mkdir debroot

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

/pre>

後処理

カーネル・モジュール等

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

pre>

# 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

/pre>

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

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

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

pre> 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

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

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

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

  • /etc/init.d/kuroevtd

    #pre{{
    #!/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

    #pre{{
    #! /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つのファイルをダウンロードして、デーモンを登録する。

pre>

# 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

/pre>

* リンク

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

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

  • 2.6.28 以降

    pre> シリアルコンソール: /dev/ttyS1 AVR: /dev/ttyS0

    /pre>

    • 2.6.28 より前

      pre> シリアルコンソール: /dev/ttyS0 AVR: /dev/ttyS1

      /pre>

/etc/inittab

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

pre>

# vi debroot/etc/inittab

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

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

/pre>

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

pre>

# cat debroot/etc/securetty | grep ttyS1 ttyS1

#...ttyS191

/pre>

/etc/init.d/halt

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

* /etc/default/halt

pre>

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

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

/pre>

/etc/init.d/reboot

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

pre> PATH=/sbin:/usr/sbin:/bin:/usr/bin

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

. /lib/lsb/init-functions

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

* /etc/default/reboot

pre>

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

/pre>

/etc/apt/sources.list

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

pre> 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

/pre>

/etc/fstab

pre>

# /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

/pre>

U-Boot の設定

LS-HGLAN, KuroBoxHG

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

pre> 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}

/pre>

HG-LAN V2

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

pre> dtb=kuroboxHG.V16.dtb

/pre>

リンク


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

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-06-09 (木) 16:50:36 (2323d)