2012/10/07

OpenOCDからU-Bootを更新しようとしたらはまった

やり方はここのPDFに書いてあるんだけどFedora用だし
バイナリも入ってるけど32bit用っぽくて使えなかった
そして結構はまったので書いてみた

dreamplug - DreamPlug - Google Project Hosting


まず現在のバージョン
U-Boot 2011.06-02334-g8f495d9-dirty (May 31 2011 - 02:06:26)
Marvell-DreamPlug

SoC:   Kirkwood 88F6281_A0
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz 
DRAM:  512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
In:    serial
Out:   serial
Err:   serial
Net:   egiga0, egiga1
88E1116 Initialized on egiga0
88E1116 Initialized on egiga1
Hit any key to stop autoboot:  0 
Marvell>>

ここから最新のU-Bootをもらってくる
(PDFもあるから確認しておくといい)

dream_burn_uboot_v10_Aug-28-2012.tar.gzを展開して
dream_burn_uboot/sheevaplug/openocd.binaries/bin/ へ移動
ここにopenocdのバイナリと設定ファイル(target/board/dreamplug.cfg)
U-Boot(u-boot、u-boot.kwb)が置いてある

まずバイナリが32bit用でシステムの64bitのライブラリにリンクしようとして
そのままでは使うことができなかった、なので使用しない
あとこの設定ファイルもくせものでそのままでは動かなかった
前回の記事で作成したファイルに同梱の設定を抜き出して追記する
前回の設定+抜き出した下記の部分を含んだファイルをtarget/board/dreamplug.cfg2とする

proc dreamplug_burn_uboot { } {

 # load u-Boot into RAM and execute it
 sheevaplug_init
 load_image ./u-boot
 load_image u-boot.kwb 0x6400000
# load_image u-boot.kwb 0x900000
 resume 0x00600000

}

まず1つ目の端末でU-Bootに入っておく

#  screen /dev/ttyUSB0 115200
U-Boot 2011.06-02334-g8f495d9-dirty (May 31 2011 - 02:06:26)
Marvell-DreamPlug

SoC:   Kirkwood 88F6281_A0
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz 
DRAM:  512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
In:    serial
Out:   serial
Err:   serial
Net:   egiga0, egiga1
88E1116 Initialized on egiga0
88E1116 Initialized on egiga1
Hit any key to stop autoboot:  0 
Marvell>>

次に2つ目の端末でOpenOCDを起動する
PDFの通りだけどファイル名を新しく作ったものにすること

# openocd -f target/board/dreamplug.cfg2 -c init -c dreamplug_burn_uboot
Open On-Chip Debugger 0.5.0 (2012-10-07-07:04)
Licensed under GNU GPL v2
For bug reports, read
 http://openocd.berlios.de/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
2000 kHz
Warn : Interface already configured, ignoring
Error: already specified ft2232_layout sheevaplug
2000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
dcc downloads are enabled
Warn : use 'feroceon.cpu' as target identifier, not '0'
dreamplug_burn_uboot
Info : clock speed 2000 kHz
Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3 (mfg: 0x1e9, part: 0x0a02, ver: 0x2)
Info : Embedded ICE version 0
Info : feroceon.cpu: hardware has 1 breakpoint/watchpoint unit
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x000000d3 pc: 0xffff0000
MMU: disabled, D-Cache: disabled, I-Cache: disabled
149712 bytes written at address 0x00600000
downloaded 149712 bytes in 1.204238s (121.407 KiB/s)
216676 bytes written at address 0x06400000
downloaded 216676 bytes in 1.704923s (124.110 KiB/s)

この時再起動されて新しいU-Bootがアップロードされるので1つ目の端末ですかさずEnterを押す
現段階では書き込まれていないようで何度上記のコマンドを実行してもアップデートされることはなかった
printenvを実行してみると以下のようになっているのでbootを実行すれば書き換わる

U-Boot 2011.06-02334-g8f495d9-dirty (Mar 01 2011 - 20:36:44)
Marvell-DreamPlug

SoC:   Kirkwood 88F6281_A0
DRAM:  512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   egiga0, egiga1
88E1121 Initialized on egiga0
88E1121 Initialized on egiga1
Hit any key to stop autoboot:  0 
Marvell>> printenv
bootcmd=sf probe 0; sf erase 0x0 0x100000; sf write 0x6400000 0x0 0xd0000; 
bootdelay=3
baudrate=115200
x_bootcmd_ethernet=ping 192.168.2.1
x_bootcmd_usb=usb start
x_bootcmd_kernel=fatload usb 0 0x6400000 uImage
x_bootargs=console=ttyS0,115200
x_bootargs_root root=/dev/sda2 rootdelay=10
stdin=serial
stdout=serial
stderr=serial
ethaddr=xx:xx:xx:xx:xx:xx
ethact=egiga0
eth1addr=xx:xx:xx:xx:xx:xx

Environment size: 396/4092 bytes
Marvell>>

bootを実行して実際にU-Bootを書き換えて再起動する

Marvell>> boot
SF: Detected MX25L1606 with page size 256, total 1 MiB
1024 KiB MX25L1606 at 0:0 is now current device
Marvell>> reset
resetting ...


U-Boot 2011.06 (Oct 15 2011 - 02:02:08)
Marvell-DreamPlug

SoC:   Kirkwood 88F6281_A0
DRAM:  512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   egiga0, egiga1
88E1121 Initialized on egiga0
88E1121 Initialized on egiga1
Hit any key to stop autoboot:  0 
Marvell>>

Warningが出ているのでデフォルトで設定を上書きしておく

Marvell>> saveenv
Saving Environment to SPI Flash...
Erasing SPI flash...Writing to SPI flash...done
Marvell>> reset
resetting ...


U-Boot 2011.06 (Oct 15 2011 - 02:02:08)
Marvell-DreamPlug

SoC:   Kirkwood 88F6281_A0
DRAM:  512 MiB
SF: Detected MX25L1606 with page size 256, total 1 MiB
In:    serial
Out:   serial
Err:   serial
Net:   egiga0, egiga1
88E1121 Initialized on egiga0
88E1121 Initialized on egiga1
Hit any key to stop autoboot:  0 
Marvell>>

以上でアップデートが完了する
しかしファイル名がAug-28-2012なのに
なんでアップデート後のバージョンがOct 15 2011なんだ?

0 件のコメント:

コメントを投稿