色々作業を始める前に、まずは不具合のあるu-bootを書き換えます。
そのままだと、最悪起動しなくなるらしいので届いたら一番にu-bootの書き換えが必要となります。前のエントリでは、MacとSheevaPlugをUSBケーブルを使ってコンソール接続しました。このエントリでは、コンソールからu-bootのCLIに入ります。
電源の抜き差しでもいいのですが、電源を切るとMac上でUSBデバイスが抜けたとアラートが出てしまい、再度screenを立ち上げるとタイミングを逃してしまう事がありますので、Ubuntu上からrebootしてu-bootに入ります。
# reboot __ __ _ _ | \/ | __ _ _ ____ _____| | | | |\/| |/ _` | '__\ \ / / _ \ | | | | | | (_| | | \ V / __/ | | |_| |_|\__,_|_| \_/ \___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \ / _ \ / _ \| __| | |_| |___| |_) | (_) | (_) | |_ \___/ |____/ \___/ \___/ \__| ** MARVELL BOARD: SHEEVA PLUG LE U-Boot 1.1.4 (Aug 14 2009 - 14:02:34) Marvell version: 3.4.16 U-Boot code: 00600000 -> 0067FFF0 BSS: -> 006CF100 Soc: 88F6281 A0 (DDR2) CPU running @ 1200Mhz L2 running @ 400Mhz SysClock = 400Mhz , TClock = 200Mhz DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6 DRAM CS[0] base 0x00000000 size 256MB DRAM CS[1] base 0x10000000 size 256MB DRAM Total size 512MB 16bit width Flash: 0 kB Addresses 8M - 0M are saved for the U-Boot usage. Mem malloc Initialization (8M - 7M): Done NAND:512 MB CPU : Marvell Feroceon (Rev 1) Streaming disabled Write allocate disabled USB 0: host mode PEX 0: interface detected no Link. Net: egiga0 [PRIME], egiga1 Hit any key to stop autoboot: 0
ここで、3秒余裕がありますので何かキーを押します。キーを押すタイミングが遅いと起動してしまいますので、rebootの後にenterを、2, 3回押しておくのが無難です。
順調にu-bootのCLIに入るとプロンプトが表示されます。
Marvell>>
そこでバージョンの確認をします。
Marvell>> version U-Boot 1.1.4 (Mar 19 2009 - 16:06:59) Marvell version: 3.4.16
Mar 19 2009 – 16:06:59となっている場合は、問題があるバージョンですのでアップデートします。SheevaPlug_U-Boot1.2.zipに含まれるu-bootであれば、以下の様に表示されるはずです。(バージョン番号が同じなので、ビルド時間を確認します。)
U-Boot 1.1.4 (Apr 9 2009 - 12:23:12) Marvell version: 3.4.16
本当は、OpenOCD + JTAGを使って安全に置き換えたいところですが、Mac上ではうまく動作しませんでした。ついでに、手元にあるCentOS5を使おうとしたのですが、OpenOCDがautomake 2.60以上が必要らしく、CentOS5では2.59でしたのであきらめました。
SheevaPlug Installerでもチャレンジしてみたのですが、デバイスが見つからないというエラーがでたので、tftpを使って置き換えることにしました。
Mac OS Xをtftpのサーバにします。
$ sudo /sbin/service tftp start
そして、u-bootのイメージを/private/tftpbootにコピーします。
$ unzip SheevaPlug_U-Boot1.2.zip $ cp -p SheevaPlug_U-Boot/U-Boot\ -\ Image/u-boot-rd88f6281Sheevaplug_400db_nand.bin /private/tftpboot
次に、母艦(MacBook Pro)とSheevaPlugをイーサネットケーブルで接続します。
ここでは、母艦のIPを192.168.168.100/24とし、SheevaPlugのIPを192.168.168.110/24とします。必ず、同じサブネット内のIPに設定する必要があります。母艦は通常のネットワークの設定から手動設定をします。
これで、母艦の準備ができましたのでu-boot上からコマンドを実行して置き換えます。
Marvell>> set ipaddr 192.168.168.110 Marvell>> set serverip 192.168.168.100
この2行の設定でSheevaPlugのIPをtftpサーバ(母艦)のIPアドレスを設定します。
Marvell>> bubt u-boot-rd88f6281Sheevaplug_400db_nand.bin
このbubtコマンドでu-bootのイメージを書き換えます。
Using egiga0 device
TFTP from server 192.168.168.100; our IP address is 192.168.168.110
Filename 'u-boot-rd88f6281Sheevaplug_400db_nand.bin'.
Load address: 0x2000000
Loading: #################################################################
###########################
done
Bytes transferred = 470808 (72f18 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
通常は、環境変数を上書きする必要はないので、’n'を押します。
ここで、’y'を押す事と環境変数が上書きされます。
Erase Env parameters sector 655360... Erase 0 - 655360 ... Copy to Nand Flash... done
ほんの数秒で書き込みが終了しますが、ここで電源が切れたりすると起動できなくなる可能性がありますので、注意する必要があります。
この状態では、すべての環境変数がリセットされてしまっていますのでNAND上のUbuntuを起動することができません。再起動する前に以下のコマンドで環境設定を保存します。
Marvell>> setenv bootcmd 'nand read.e 0x800000 0x100000 0x400000; bootm 0x800000' Marvell>> setenv bootargs 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000@0x000000(u-boot),0x400000@0x100000(uImage),0x1f800000@0x500000(rootfs)rw root=/dev/mtdblock2' Marvell>> saveenv
そうすると以下のメッセージが表示され、環境変数が無事保存されました。
Saving Environment to NAND... Erasing Nand...Writing to Nand... done
この状態で電源を入れ直して、ちゃんとバージョンが新しくなっている事を確認します。先ほどと同様に、起動時にキーを押してu-bootのCLIに入ります。
versionコマンドでバージョンが4月9日版である事が確認できたらbootコマンドで起動します。
Marvell>> boot
これでNAND上のUbuntuから正常に起動することが確認できれば大丈夫です。
実は、OpenOCDと格闘していたのでここまでで4日ほどかかってしまいました。
タグ: u-boot