ブートローダーをいろいろ試しているうちに、つぶしてしまったので、urjtagでブートローダーを書き込む事にしました。
u-bootにもixp425のビルド設定がありますが、NSLU2はredbootを使っていたようで、redbootの方が良さそうです。
NSLU2のサイトはほとんどなくなっていますが、かろうじて下記のレポジトリが見つかりました。
ここにある、redbootのレポジトリはtoolchainレポジトリ(gcc3)のLinuxのバイナリでビルドが通ります。ただ通常のredbootとディレクトリ構成が違っていて、configした後のファイルを抜き出したもののようです。いつものようにFreeBSDのLinuxエミュレーションでビルドしてみます。
gcc3なのが気になりますが、普通にarmでビルドされたgcc4はbigでもlittleでもコンパイルはできますが、big用のlibgccを用意しなければいけないのでこれを使うのが良さそうです。
どうもこのソースはNSLU2とは関係ないものだけどixp425がターゲットなので一緒にしているようです。
iop_redbootというレポジトリはIntelが配布していた、ソースから抜き出したオリジナルのeCosのredbootのコードのようです。元になったIOP_Redboot_Mar_19_2007_source.tar.gzはsourceforgeにありましたが、eCosのツールなどが入っていないので、別に用意する必要があるようです。
すんなりビルドは通ったのでurjtagで焼いてみます。
自作の20ピンの変換コネクタは、そのままでは周りの部品にあたって使えないので、いろいろ考えてみて足長ピンソケットの下駄を履かせて使うことを思いつきました。
足長ピンソケットは一列なのでVCCとGNDは別に取れるように改良しました。
cable ft2232
detect
endian big
detectflash 0x50000000
flashmem 0x50000000 redboot.bin noverify
何も出ません。
ixp425にはUARTが2つあるので、逆になってるのかもしれません。設定を変えてビルドしてみます。
--- a/include/pkgconf/hal_arm_xscale_grg.h
+++ b/include/pkgconf/hal_arm_xscale_grg.h
@@ -18,7 +18,7 @@
#define HAL_PLATFORM_MACHINE_TYPE 245
#define CYGNUM_HAL_BREAKPOINT_LIST_SIZE 32
#define CYGNUM_HAL_BREAKPOINT_LIST_SIZE_32
-#define CYGSEM_HAL_IXP425_PLF_USES_UART1 1
+//#define CYGSEM_HAL_IXP425_PLF_USES_UART1 1
#define CYGSEM_HAL_IXP425_PLF_USES_UART2 1
#define CYGSEM_HAL_ROM_MONITOR 1
出ました。
Sercomm(tm) intel board bootloader [ROMRAM]
Sercomm certified release, version 1.00 - built 08:12:35, Mar 29 2023
Platform: Intel Generic Residential Gateway (XScale)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
RAM: 0x00000000-0x04000000, 0x001f4588-0x04000000 available
welcome, snowel 888
== Executing boot script in 2.000 seconds - enter ^C to abort
not have eRcOmM
Initialize GIGAbit ethernet PCI card
Found device on bus 0, devfn 0xa0:
Vendor 0xffff
Device 0xffff
PCI can't find GigaBit card
In download function
ixp425のurjtagはflashは焼けましたが、機能が完全に使えているわけではなさそうです。
ちなみにopenocdはhaltできませんでした。
しかし、redbootは複雑なディレクトリになっていて、よく抜き出してコンパイルが通る状態にしたものだと感心します。
なにか特殊用途に作りこまれているようです、ブートのデバッグはちょっと間違えると、何も出なかったりして難しいので、とりあえずこれをベースにいじってみます。
I
確実なビルドのRedbootがあればOpenRGのbootからjtagを使わずに書き換えが可能です。ただ失敗する可能性もあるのでurjtagは用意したほうが良いです。urjtagのixp425対応はすこぶる安定してます。
GPIO | Dir | Func |
---|---|---|
2 | IN | SW2 |
3 | OUT | LVC374 OE |
4 | OUT | LED8(下) |
8 | IN | PCI INTD |
9 | IN | PCI INTC |
10 | IN | PCI INTB |
11 | IN | PCI INTA |
13 | OUT | PCI RESET |
14 | OUT | PCI CLK |