2011年4月25日月曜日

SheevaPlug+のSDカードからの起動メモ

2010年の4月に購入して1年以上ほったらかしにしていたSheevaPlug+をようやくいじりました。
挫折していたSDカード利用のブートに何とかうまくいきました。ようやく実用できるように。

細かい手順は全く覚えていないため記憶している作業の大枠だけ書き残しています。
ここに書いてある通りにやるだけでは設定できないので注意してください!!


まず普通に内蔵メモリ(NAND)から起動。前準備の前準備としてaptを使えるようにするため/etc/hostsファイルの以下の行をコメントアウトする。
91.189.88.36 ports.ubuntu.com
これをしておかないとaptに失敗します。
前準備としてカーネルをアップデート。

# apt-get update
# apt-get install wget
# wget http://sheeva.with-linux.com/sheeva/README-PLUG-UPDATE.sh
# chmod a+x README-PLUG-UPDATE.sh
# ./README-PLUG-UPDATE.sh 2.6.38.4 --nandkernel
# reboot

U-Bootの環境変数を変更。(eSATA対応機種なのでarcNumberは2678に。古いものは2097らしい)

Mervell>> setenv mainlineLinux yes
Mervell>> setenv arcNumber 2678
Mervell>> saveenv
Mervell>> reset

SheevaPlugに4GBのSD HCカードを接続して以下の様にパーティションを分割。

root@debian:/home/kz# fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 3963 MB, 3963617280 bytes
128 heads, 63 sectors/track, 960 cylinders
Units = cylinders of 8064 * 512 = 4128768 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 131 528160+ 83 Linux
/dev/mmcblk0p2 132 262 528192 82 Linux swap / Solaris
/dev/mmcblk0p3 263 960 2814336 83 Linux

Command (m for help):
512MBのブート用パーティション1と512MBのスワップ用パーティション2。残りをルート用パーティション3に割り当てました。

次にフォーマット実施。

# mkfs.ext2 /dev/mmcblk0p1
# mkfs.ext2 /dev/mmcblk0p3
# mkswap /dev/mmcblk0p2

そしてSDカードのルート用パーティションをマウント。

# mount /dev/mmcblk0p3 /mnt

内蔵メモリ(NAND)に収録されている/以下のシステムをSDカードにコピー。

# cp -axv / /mnt

/mnt/etc/fstabを編集。
# /etc/fstab: static file system information.
#
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot ext2 defaults 1 2
/dev/mmcblk0p3 / ext2 defaults 1 1
/dev/mmcblk0p2 swap swap defaults 0 0
作業が終わったらアンマウント。

# umount /mnt

次にブート用パーティションをマウント。

# mount /dev/mmcblk0p1 /mnt

カーネルのイメージファイルをコピー。

# cp -pv sheeva-2.6.38.4-System.map /mnt
# cp -pv sheeva-2.6.38.4-uImage /mnt
# cd /mnt
# ln -s sheeva-2.6.38.4-uImage uImage
# cd ~/
# umount /mnt

あとは再起動してU-Bootの設定を変更。かなり間違っている+無駄な設定が混じっているのですがなんか動いてます。

boot関連の設定が変なのでそのうち整理して掲載します。

Mervell>> printenv
arcNumber=2678
autoload=no
baudrate=115200
bootargs_end=:::DB88FXX81:eth0:none
bootargs_mmc=console=ttyS0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext2 rootdelay=3
bootargs_nand=console=ttyS0,115200 mtdparts=nand_mtd:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock2 rw rootfstype=jffs2 ip=10.4.50.4:10.4.50.5:10.4.50.5:255.255.255.0:DB88FXX81:eth0:none
bootargs_root=root=/dev/mtdblock2 ro
bootcmd_mmc=setenv bootargs $(bootargs_mmc); mmcinit; ext2load mmc 0:1 0x800000 /uImage; bootm 0x800000
bootcmd_nand=setenv bootargs $(bootargs_nand); nand read.e 0x800000 0x100000 0x400000; bootm 0x800000
bootcmd=run bootcmd_mmc; run bootcmd_nand;
bootdelay=3
CASset=min
cesvcid=ULULULULULULPPULULULULULDA
console=console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs)
disaMvPnp=no
disL2Cache=no
disL2Prefetch=yes
enaAutoRecovery=yes
enaCpuStream=no
enaDCPref=yes
enaICPref=yes
enaMonExt=no
enaWrAllo=no
ethact=egiga0
ethaddr=00:50:43:01:51:FA
ethmtu=1500
ethprime=egiga0
fileaddr=17A12000
filesize=108e000
image_name=uImage
ipaddr=10.10.0.1
loadaddr=0x0800000
loads_echo=0
mainlineLinux=yes
MALLOC_len=1
mvNetConfig=mv_net_config=(00:11:88:0f:62:81,0:1:2:3),mtu=1500
mvPhoneConfig=mv_phone_config=dev0:fxs,dev1:fxs
nandEcc=1bit
nandEnvBase=a0000
netbsd_en=no
netmask=255.255.0.0
netretry=no
pcieTune=no
pexMode=RC
rcvrip=169.254.100.100
rootpath=/mnt/ARM_FS/
run_diag=no
sata_dma_mode=yes
serverip=10.10.0.2
setL2CacheWT=yes
standalone=fsload 0x2000000 $(image_name);setenv bootargs $(console) root=/dev/mtdblock0 rw ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvPhoneConfig); bootm 0x2000000;
stderr=serial
stdin=serial
stdout=serial
usb0Mode=host
vxworks_en=no
yuk_ethaddr=00:00:00:EE:51:81
うまくいったら今のうちに初期状態のSDカードをイメージにして接続したUSBメモリにバックアップ。
一旦SDを抜いて内蔵メモリ(NAND)ブートしてからSDとUSBメモリを挿して以下の処理を実施。

# mount -t fat32 /dev/sda1 /mnt
# dd of=/dev/mmcblk0 if=/mnt/sdcard_image.ddi

参考にしたサイト