SheevaPlug の内蔵 NAND は 512 MB しかない。apt-get でさまざまなアプリケーションをインストールするとさすがに容量が足りなくなってくる。そこで SDIO に SD カードを接続し、SD から SheevaPlug を起動することを試してみる。
SD カードからブートできるようになると、SD カードの入れ替えだけで OS を切り替えることができるようになる。VMware のイメージファイルを交換するような感じ。これはかなり便利。
具体的なやり方については以下を参考にした:
http://openplug.org/plugforum/index.php?topic=183.0
SD カードには TS4GSDHC6 を使用した。
SD から起動するためには上記で提供されている patch (sd.tgz) を u-boot に適用し再コンパイルして置き換える必要がある。
まず SheevaPlug_U-Boot.zip を http://www.marvell.com/products/embedded_processors/developer/kirkwood/sheevaplug.jsp から落としてくる。
フォーラムに書かれているやり方を参考に u-boot をコンバイルする:
– u-boot-1.1.4.tar.bz2 を展開。それを u-boot-3.4.16.zip で上書きする。
– sd.tgz を u-boot のディレクトリ直下で解凍。
– include/configs/mv_hw.h を修正:
//#if defined(MV_88F6183) || defined(MV_88F6183L)
#if 1
#define CONFIG_MMC
#define CFG_MMC_BASE 0xF0000000
#endif
– Makefile を修正:
@[ -z "$(findstring rd88f6281Sheevaplug_config,$(RULE))" ] ||
{ echo “MV_FLAGS += -DRD_88F6281A_SHEEVA_PLUG” >> include/config.mk;
echo “MV_IMAGE_FLAGS = -DMV_SEC_256K” >> include/config.mk;
echo “MV_IMAGE_FLAGS += -DMV_BOOTSIZE_16M” >> include/config.mk;
echo “MV_IMAGE_FLAGS += -DMV_LARGE_PAGE” >> include/config.mk;
echo “MV_IMAGE_FLAGS += -DMV_MMC” >> include/config.mk;
echo “MV_FLAGS += -DMV_BOOTROM” >> include/config.mk;
echo “MV_DDR_FREQ = 400db” >> include/config.mk;
cp board/mv_feroceon/config_kw/u-boot-sec256k.lds board/mv_feroceon/config_kw/u-boot.lds;
echo “** SHEEVA PLUG** config ” ;
}
– コンパイル:
$ make rd88f6281Sheevaplug_config NBOOT=1
$ make clean
$ make
u-boot-rd88f6281Sheevaplug_400db_nand.bin というファイルが新しく作成される。u-boot を tftpboot 経由で書き換えるために u-boot-rd88f6281Sheevaplug_400db_nand.bin を /tftpboot/ にコピーしておく。
bubt コマンドを使って u-boot を書き換える:
Marvell>> bubt u-boot.bin
Using egiga0 device
TFTP from server aaa.bbb.ccc.ddd; our IP address is aaa.bbb.ccc.eee
Filename ‘u-boot.bin’.
Load address: 0×2000000
Loading: #################################################################
###########################
done
Bytes transferred = 470836 (72f34 hex)
**Warning**
If U-Boot Endiannes is going to change (LE->BE or BE->LE), Then Env parameters should be overriden..
Override Env parameters? (y/n) y
Erase Env parameters sector 655360…
Erase 0 – 655360 …
Copy to Nand Flash…
done
これで u-boot の書き換えは完了。reset 後、help に mmcinit が増えていることを確認。
以前定義した変数がいくつか書き換えられてしまっていたのでそれらを修正。
次に SD カードに置く rootfs を作成する。ここでは既存の rootfs を再利用することにする。このためにまず nfsroot で起動する。
nfsroot の /dev/ に MMC 用のデバイスファイルが作成されていなかったら作成しておく。
# mknod /dev/mmcblk b 179 0
# mknod /dev/mmcblk1 b 179 1
# mknod /dev/mmcblk2 b 179 2
# mknod /dev/mmcblk3 b 179 3
SD カードのパーティションを適当に切る:
Device Boot Start End Blocks Id System
/dev/mmcblk1 1 3201 102424 83 Linux
/dev/mmcblk2 3202 118402 3686432 83 Linux
/dev/mmcblk3 118403 124928 208832 82 Linux swap
上から /boot 用、/ 用、swap 用にした。boot 用と / 用は ext3 でフォーマットしておく。swap 領域の初期化も行っておく。
今まで使っていた rootfs をマウントして、これを SD カードにコピーする:
# mount /dev/mmcblk2 /mnt/
# mount -t jffs2 /dev/mtdblock2 /mnt1/
# cd /mnt1
# cp -a * /mnt/
fstab を編集:
# vi /mnt/etc/fstab
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
/proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
varrun /var/run tmpfs rw,nosuid,mode=0755 0 0
varlock /var/lock tmpfs rw,noexec,nosuid,nodev,mode=1777 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
#rootfs / rootfs rw 0 0
/dev/mmcblk0p1 /boot ext3 rw 0 0
/dev/mmcblk0p2 / ext3 rw 0 0
/dev/mmcblk0p3 swap swap defaults 0 0
カーネルイメージを /boot 領域にコピーしておく。
u-boot のプロンプトに入り、SD カードが使えそうか確認:
Marvell>> mmcinit
Marvell>> ext2ls mmc 0:1
SD カードから起動するために u-boot のパラメータを設定する:
Marvell>> set bootargs ‘console=ttyS0,115200 mtdparts=orion_nand:0×400000@0×100000(uImage),0x1fb00000@0×500000(rootfs)rw root=/dev/mmcblk0p2 rootfstype=ext3 rootdelay=3′
Marvell>> set bootcmd ‘mmcinit; ext2load mmc 0:1 0×800000 /uImage-2.6.30-rc5-090510; bootm 0×800000′
Marvell>> saveenv
Marvell>> reset
起動がかなり速くなった。内蔵 NAND の場合、カーネルイメージのロードに時間がかかっていたが、これがあっという間に終わる。なかなか良い感じだ。
次は Ubuntu 以外の OS をインストールした SD カードを作成してみよう。
http://openplug.org/ のフォーラムや Wiki の情報がかなり充実してきている。これからも見逃すことができなさそうだ。
タグ: Linux, SheevaPlug