sheevaplugの中身をDebianに置き換える

初期状態ではubuntuが入っているがいい加減古い。
せっかくバージョンアップするなら使い慣れてるDebianにしようと思いやってみた。
さらにこの際なのでフラッシュメモリに特化したファイルシステムUBIFSに変更してみた。

多分DreamPlugでもほぼ同じ手順でできると思う。

参考URL
http://www.plugcomputer.org/plugwiki/index.php/SheevaPlug_Installer
http://www.plugcomputer.org/plugwiki/index.php/Installing_Debian_To_Flash

準備するもの

* sheevaplug 本体
* 作業領域として利用する512M以上のUSBメモリ(SDカードで代用可)
* ローカルネットワークのどこかで稼動しているDHCPサーバとTFTPサーバ
* sheevaplug-installer
 以下からダウンロードする。
 http://www.plugcomputer.org/index.php/us/resources/downloads?func=select&id=5
* kernel uImage
 http://sheeva.with-linux.com/sheeva/ から好きなバージョンのものをダウンロード
 ここでは 2.6.38/2.6.38.6/sheeva-2.6.38.6-uImage を選択した。
ついでに sheeva-2.6.38.6-Modules.tar.gz もダウンロードしておくとよい。
* Debian インストーラ
 以下から uImage と uInitrd をダウンロードする。
 http://d-i.debian.org/daily-images/armel/daily/kirkwood/netboot/marvell/sheevaplug/

TFTPサーバの準備

Debian なら atftpd をインストールして /etc/init.d/atftpd start すればいい。
その場合のルートディレクトリは /srv/tftp/ になる。

TFTPサーバのルートディレクトリに以下を配置

uboot.bin               # sheevaplug-installer に付属している uboot/uboot.bin
sheeva-2.6.38.6-uImage  # ダウンロードした kernel uImage
uImage                  # ダウンロードした Debian インストーラ
uInitrd                 # ダウンロードした Debian インストーラ

U-BOOT入れ替え

Marvell>> setenv ipaddr (sheevaplugのIP)
Marvell>> setenv serverip (TFTPサーバのIP)
Marvell>> tftpboot 0x0800000 uboot.bin
Marvell>> nand erase 0x0 0xa0000
Marvell>> nand write 0x0800000 0x0 0xa0000
Marvell>> reset

ここに限らず tftpboot を実行したとき "Retry count exceeded; staring again"というエラーがでることがあるが、成功するまで何度でも頑張ること。

NANDに書き込まれているカーネルを入れ替える。

Marvell>> setenv ipaddr (sheevaplugのIP)
Marvell>> setenv serverip (TFTPサーバのIP)
Marvell>> tftpboot 0x2000000 sheeva-2.6.38.6-uImage
Marvell>> iminfo
Marvell>> nand erase 0x100000 0x400000
Marvell>> nand write 0x2000000 0x100000 0x400000
Marvell>> setenv mainlineLinux yes
Marvell>> setenv arcNumber 2097
Marvell>> saveenv

Debianインストーラを実行し、USBメモリにインストール。

USBメモリをsheevaplugに挿入

Marvell>> tftpboot 0x0400000 uImage
Marvell>> tftpboot 0x0800000 uInitrd
Marvell>> setenv bootargs console=ttyS0,115200 base-installer/initramfs-tools/driver-policy=most
Marvell>> bootm 0x0400000 0x0800000

Debianのインストールが始まる。途中でUSBメモリパーティションの区切り方を聞いてくるが、default のままで行う(LVMは利用しない)。

USBメモリから起動

Marvell>> setenv bootargs console=ttyS0,115200 mtdparts=nand_mtd:0xa0000@0x0(uboot),0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) root=/dev/sda2 rootwait rw
Marvell>> boot  

SDカードで行っている場合は /dev/sda2 でなく /dev/mmcblk0p2 になる。

root でログインし NAND のファイルシステムを UBIFS に変更

sheeva login: root
root@sheeva:~# dhclient
root@sheeva:~# apt-get install mtd-utils
root@sheeva:~# ln -fs /proc/mounts /etc/mtab
root@sheeva:~# ubiformat /dev/mtd2 -s 512
root@sheeva:~# ubiattach /dev/ubi_ctrl -m 2 
root@sheeva:~# ubimkvol /dev/ubi0 -N rootfs -m

USBメモリにインストールした Debian を NAND にコピー

root@sheeva:~# mount -t ubifs ubi0:rootfs /mnt
root@sheeva:~# mkdir /tmp/rootfs
root@sheeva:~# mount -o bind / /tmp/rootfs/
root@sheeva:~# cd /tmp/rootfs
root@sheeva:~# sync
root@sheeva:~# cp -a . /mnt/

/mnt/etc/fstab を以下の内容に差し替え

/dev/root /      ubifs defaults,noatime,rw                      0 0
tmpfs  /var/run  tmpfs size=1M,rw,nosuid,mode=0755              0 0
tmpfs  /var/lock tmpfs size=1M,rw,noexec,nosuid,nodev,mode=1777 0 0
tmpfs  /tmp      tmpfs defaults,nosuid,nodev                    0 0

再起動し、sheevaplug の起動オプションを修正

root@sheeva:~# shutdown -r now

再起動して Marvell>> のプロンプトを表示させたらUSBメモリを抜く

Marvell>> setenv bootargs 'console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
Marvell>> saveenv
Marvell>> reset

めでたくDebianが起動したら、後はお好きに〜

2011/06/22追記

openvpnでtunが必要になったので、別マシンにて sheeva-2.6.38.6-Modules.tar.gz から tun.ko を取り出して以下を実行した。

# cp tun.ko /lib/modules/2.6.38.6/kernel/drivers/net/tun.ko 
# depmod -a
# echo tun >> /etc/modules
# modprobe tun

他にも必要なモジュールがでてきたら同様にすればいいと思う。