(ここ http://siruko.com/kuro/debian.htmlなどを参考にさせて頂いた)
Squeezeになったものは、カーネルのバージョンは2.6.25。これでUSB無線LANを使おうとカーネルをコンパイルしたりしたのだがどうにもラチがあかず、最新のカーネルにすることにした。
なかなかうまくいかずに試行錯誤して、どうやら出来たので手順をメモしておく。
1. カーネルをコンパイルする
セルフコンパイル環境も玄箱上に作ってあるが、時間が掛かって仕方ないので、クロスコンパイルで行うことにする。セルフコンパイルの時は、1-3.から、CROSS_COMPILE=powerpc-linux-gnu- を削除して読み替えればよい。
1-1. クロスコンパイルするマシンを用意
aptの使える手頃なLinuxがある場合はそれを使っていいが、手元になかったので、Oracle VM VirtualBoxを使って仮想マシンにDebian Squeezeをインストールした。
- Oracle VM VirtualBox
- Debian Squeeze
玄箱に合わせてSqueezeを選択。ネットワークインストールでデスクトップ環境を外して最小限インストール(どうせコンパイルするだけなのでデスクトップいらないし)にしたが、この辺はお好み。
1-2. クロスコンパイル環境を用意
/etc/apt/sources.list に以下の1行を追加
deb http://www.emdebian.org/debian/ squeeze mainしたら、updateしてツールを入れる。
# aptitude install emdebian-archive-keyring
# aptitude update
# aptitude install build-essential ncurses-dev \
libc6-dev-powerpc-cross gcc-4.3-powerpc-linux-gnu \
binutils-powerpc-linux-gnu uboot-mkimage
1-3. カーネルをビルド
1-3-1. ソースを展開してconfigを生成
2014/02/25で2.6系の最新は2.6.39.4だったのでこれを使う。
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.bz2
tar jxvf linux-2.6.39.4.tar.bz2
cd linux-2.6.39.4
ARCH=powerpc make linkstation_defconfig
1-3-2. .config を編集
MTDのため、.configが以下になるようにするらしい。
面倒なので、viで.configを書き換える。662行目あたりから
#を
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_MTD_PHYSMAP=y
# CONFIG_MTD_PHYSMAP_COMPAT is not set
# CONFIG_MTD_PHYSMAP_OF is not set
# CONFIG_MTD_INTEL_VR_NOR is not set
# CONFIG_MTD_PLATRAM is not set
#と変更。
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_COMPAT=y
CONFIG_MTD_PHYSMAP_START=0xffc00000
CONFIG_MTD_PHYSMAP_LEN=0x400000
CONFIG_MTD_PHYSMAP_BANKWIDTH=1
ARCH=powerpc make menuconfig
で該当箇所を変更しても可。
1-3-3. ビルド
カーネルとモジュールをビルドし、出来上がりを、仮に /opt/ppc/ (どこでもいいけど) 以下に入れておく。
# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make uImage modules出来たカーネルとモジュールを玄箱に入れるので、tarで固めておく。
# ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- INSTALL_MOD_PATH=/opt/ppc make modules_install
# scripts/dtc/dtc -f -I dts -O dtb -o /opt/ppc/boot/kuroboxHD.dtb \
-V 16 arch/powerpc/boot/dts/kuroboxHD.dts
- ※玄箱HGは、
scripts/dtc/dtc -f -I dts -O dtb -o /opt/ppc/boot/kuroboxHG.dtb \
-V 16 arch/powerpc/boot/dts/kuroboxHG.dts
だと思われる。
mkdir -p /opt/ppc/boot
cp -p arch/powerpc/boot/uImage /opt/ppc/boot/vmlinux.UBoot
cp -p System.map /opt/ppc/boot/
pushd /opt/ppc/
tar cvfz kuro-kern.tgz boot
tar cvfz kuro-lib.tgz lib
popd
2. 玄箱のブート環境を整備する
玄箱のHDDは、次のパーティションだと仮定する。
/dev/sda1 MontaVista Linuxの(オリジナルの)/パーティションDebian Squeeze化した状態では、起動は、"sda1の /boot/loader.o から /boot/vmlinuz.bin が走る"ことになっていると思われるが、これを"/boot/uloader-2.4.17_mvl21-sandpoint.o から /boot/u-boot-1.2.0-hd.ram.bin から /boot/vmlinux.UBoot"になるようにする。
/dev/sda2 swap
/dev/sda3 Debian Squeezeの/パーティション
2-1. 必要なファイルの入手
玄箱/玄箱HG 用 ubuntu 12.04 LTS imageより、kuro-bootsel2.20080419.tar.gz と ubuntu-precise-installer.zip を頂戴してくる。
2-2. ブート用のファイルを配置
ubuntu-precise-installer.zip を解凍して、次のファイルを玄箱の sda1:/boot に置く。
u-boot-1.2.0-hd.ram.binDebian Squeezeが動いているなら、scpなりで転送して、
uloader-2.4.17_mvl21-sandpoint.o
※玄箱HGでは
u-boot-1.2.0-hg.ram.bin
uloader-2.4.17_mvl21.o
のはず。
# mount /dev/hda1 /mntなど。玄箱からHDDを取り出して、Linuxマシンにマウントしても可。
# cp u-boot-1.2.0-hd.ram.bin /mnt/boot
# cp uloader-2.4.17_mvl21-sandpoint.o /mnt/boot
このU-BOOTは、rootが/dev/sda3、コンソールの玄箱側192.168.0.151、nc側192.168.0.150 とのこと。
次に、kuro-bootsel2.20080419.tar.gz を玄箱MontaVista上で解凍して、install.shを実行。
あるいは、玄箱Debian上で解凍して、install.shの内容を手作業で実行。
# mount /dev/hda1 /mnt
# mkdir -p /mnt/boot/tools
# cp kuro_swread kuro_morse /mnt/boot/tools/
# cp kuro_bootsel2.sh /mnt/etc/init.d/
# chmod 755 /mnt/etc/init.d/kuro_bootsel2.sh
# pushd /mnt/etc/rc.d/rcS.d
# ln -s ../init.d/kuro_bootsel2.sh S15kuro_bootsel2.sh
# popd
# cp kuro_boot.conf /mnt/etc/
2-3. kuro_bootsel2.sh を変更
/etc/init.d/kuro_bootsel2.sh を次のように変更。
101行目から
if [ ! -f $2 ]; then
/bin/echo "Kernel does not exist."
/boot/tools/kuro_morse F $AVR
return 0;
fi
init_avr
を
# if [ ! -f $2 ]; then
# /bin/echo "Kernel does not exist."
# /boot/tools/kuro_morse F $AVR
# return 0;
# fi
if [ -f $2 ]; then
/sbin/insmod $1 kernel=$2 $3
else
echo /sbin/insmod $1 $2 $3
/sbin/insmod $1 $2 $3
echo /sbin/init 6
/sbin\/init 6
fi
init_avr
とする。
(している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "101,105 s/^./#/" -e "110 s/^./#/" ... と同じである。)
2-4. kuro_boot.conf を変更
sda1:/etc/kuro_boot.conf を、uloaderを起こしに行くように書き換える。念のため古いバージョンは取っておいた方がいいかもしれない。
# cp kuro_boot.conf kuro_boot.conf.org(している内容は、ubuntu-precise-installer-kuroBOX.sh の sed -e "s/^#bootdefault=1$/bootdefault=2/" ... と同じである。)
# vi kuro_boot.conf
# kuro_bootsel config file (2008-04-01)
#
# "bootdefault"
# 1: Linux, 2-9: See below
bootdefault=2
(略)
# Menu entry No.2
#
menu2="Debian"
loader2="-f /boot/uloader-2.4.17_mvl21-sandpoint.o"
kernel2='uboot=/boot/u-boot-1.2.0-hd.ram.bin'
option2=''
配置したファイル名を書く。玄箱HGなら、
loader2="-f /boot/uloader-2.4.17_mvl21.o"のはず。
kernel2='uboot=/boot/u-boot-1.2.0-hg.ram.bin'
3. カーネルとモジュールを配置
先ほど作ったカーネルとモジュールを、玄箱に持ってきて配置する。
カーネルは sda1 の /boot へ。
モジュールは sda3 の /lib/moduels へ。
kuro-kern.tgz と kuro-lib.tgz を玄箱に持って行って、
※Debian Squeeze 上なら玄箱からHDDを取り出していれば、sda1とsda3をそれぞれマウントして展開。
# mount /dev/hda1 /mnt
# tar xvfz kuro-kern.tgz -C /mnt
# umount /mnt
# tar xvfz kuro-lib.tgz -C /
4. fstab を変更
カーネルを2.6.25から2.6.39に変えると、ハードディスクの見え方が /dev/hda から /dev/sda になる。sda3:/etc/fstab に書いてあるのは/dev/hdaなので、変更する。
hdaとsdaを両方書いておけば、ない方は失敗するだけなので、古いカーネルでブートした時もマウントされるようになる。
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda2 none swap sw 0 0
/dev/hda3 / ext3 defaults,noatime,errors=remount-ro 0 0
/dev/sda2 none swap sw 0 0
/dev/sda3 / ext3 defaults,noatime,errors=remount-ro 0 0
5. 祈りながらリブート
イーサネットの口がついたLinuxマシンがあれば、netcatをインストールしてコンソールを見られる。
玄箱のイーサとマシンのイーサを繋いで、玄箱のスイッチをクロス側にして、
# aptitude install netcatとして、玄箱を再起動。
# ifconfig eth0 192.168.0.150 netmask 255.255.255.0 up
# nc -v -v -n -u -s 192.168.0.150 -p 6666 192.168.0.151 6666
うまくできていれば、コンソール出力が出てきて、玄箱がブートするはずである。
出力こんな感じ。
# nc -v -v -n -u -s 192.168.0.150 -p 6666 192.168.0.151 6666
Connection to 192.168.0.151 6666 port [udp/*] succeeded!
U-Boot 1.2.0 (Mar 26 2009 - 17:24:32) LinkStation / KuroBox
stdin : nc
stdout: nc
stderr: nc
IDE: Bus 0: OK
Device 0: Model: TRANSCEND Firm: Ser#: 0507070840470450
Type: Removable Hard Disk
Capacity: 3907.9 MB = 3.8 GB (8003520 x 512)
Boot in 01 seconds ('s' to stop)...
Loading 0:1:boot/vmlinux.UBoot
1937671 bytes read
2387 bytes read
## Booting image at 00800000 ...
Image Name: Linux-2.6.39.4
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 1937607 Bytes = 1.8 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Booting using flat device tree at 0x7f0000
Using Buffalo Linkstation machine description
Linux version 2.6.39.4 (root@yakisoba.usoinfo.info) (gcc version 4.3.5 (Debian 4.3.5-4) ) #4 Tue Feb 25 11:33:17 JST 2014
bootconsole [udbg0] enabled
Adding PCI host bridge /soc10x/pci@fec00000
PCI host bridge /soc10x/pci@fec00000 (primary) ranges:
IO 0x00000000fe000000..0x00000000febfffff -> 0x0000000000000000
MEM 0x0000000080000000..0x00000000efffffff -> 0x0000000080000000
BUFFALO Network Attached Storage Series
(C) 2002-2005 BUFFALO INC.
Zone PFN ranges:
(略)
いけなくなった場合、EMモードで立ち上げるか玄箱からハードディスクを外してLinuxマシンでマウントし、sda1:/etc/kuro_boot.conf の2番を古いものに書き換えて起動し直せば、2.6.25のカーネルで立ち上げられる。
menu2="Debian"
loader2="-f /boot/loader.o"
kernel2=/boot/vmlinux.bin
option2='cmdline="root=/dev/hda3"'
ようやく玄箱で無線LAN(GW-US54Mini2)がrt73usbで使えるようになった。
しかし、どうも通信が不安定で、ディレイがひどく大きくなったりする。USBハブを挟んでいるのが原因かと思って直結にしてみたが、あまり状況は改善されない。CPUパワーはそんなに食っているようには見えないけど、WPAを使っているせいかなあ。。。現状、使えるとは言いにくい。
フロントのUSBの端子を引き出して、直結。
[追記]
無線LANが不安定なのは、省電力機能がどうも悪さをしている模様であった。
# iwconfig wlan0 power offで、遅延もパケットロスもなくなった。
/etc/network/interfaces に、post-up /sbin/iwconfig wlan0 power off と書いて、解決。
iface wlan0 inet staticこれで無線LAN内蔵の省電力Debianサーバーの出来上がりだ!
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
post-up /sbin/iwconfig wlan0 power off
address 192.168.128.x
network 192.168.128.0
netmask 255.255.255.0
broadcast 192.168.128.255
gateway 192.168.128.1
▼レンタルサーバー・VPS比較表を見る▼