昔はMIPSのSOCを作っていたBroadcomですが、最近はARMに鞍替えしています。このSOCが入った猛牛さんのターゲットがハードオフで330円で手に入ったので最初の一歩をやってみます。
ターゲットは保護シールがはったままで、使用された形跡がありません。アダプタとLANケーブル付で330円はとってもお徳でした。
本体に電源のスイッチがあるのですが機能しません。初期不良のため処分されたものなのかも知れません。
とりあえず分解してみます。一度も普通に使われずに分解されるのもなんともしのび難いのですが、心を鬼にします。UARTのピンは立っていましたが、SOCにはごっついヒートシンクがはってあってなにか分かりません。BCM4708という噂でこれはBCM5301Xと同じラインのようです。
BroadcomのARM SOCには2系統あり、ラズパイなどで使われているBCM2xxxとMIPS SOCのIOを流用したBCM470x(BCM5301X)系です。
BCM4712,BCM4702はMIPS SOCでBCM4708はARM SOCです。
Comcerto2000のポートはBCM5301Xをベースにしていて、このSOCも試してみたいと思っていました。
BCM5301XのサポートはNetBSD 6の終わりくらいで入ったようです。Cortex-A9の最初のサポートでした。当時はまだFDTが入っていなくて、これ以降のCortex-A9のサポートはFDTでおこなわれています。
BroadcomはMIPSの頃からオリジナルのCFEというブートローダーを使っていて、ARMになってもCFEのようです。
最初の一歩のコードをNetBSDに入れます。
diff --git a/sys/arch/arm/arm/armv6_start.S b/sys/arch/arm/arm/armv6_start.S
index a448e45fbffd..df8b87e00b18 100644
--- a/sys/arch/arm/arm/armv6_start.S
+++ b/sys/arch/arm/arm/armv6_start.S
@@ -94,6 +94,11 @@
.text
ENTRY_NP(generic_start)
+ ldr r2, .Luart
+ mov r1, #78
+ strb r1, [r2]
+.Luart:
+ .word 0x18000300
#if defined(__ARMEB__)
/* Make sure sctlr.u = 1 when cpsr.e = 1. */
evbarm/conf/BCM5301Xでカーネルを作ります。エラーが出るので、とりあえずコメントアウトしてビルドを通します。エラーが何か分かりづらくなるので最初はパラレルビルド(-j)はしないほうがいいです。
サーバーに192.168.11.2のアドレスを付けてtftpできるようにしてビルドしたnetbsd.binをおきます。
CFE> boot -addr=0x00008000 -max=0x1000000 192.168.11.2:netbsd.bin
Loader:raw Filesys:tftp Dev:eth0 File:192.168.11.2:netbsd-BCM5301X.bin Options:(null)
Loading: .... 4221332 bytes read
Entry at 0x00008000
Closing network.
Starting program at 0x00008000
N
このCFEのbootコマンドはデフォルトでは262144バイトしか読み込みません。また-maxは-addrを指定しないと有効になりません。
ロードアドレスの-addr=0x00008000はLinuxと一緒にしてみました。
CFEのネットワークはLAN側のポートが使えるようです。
実行が移せたみたいです。ここから始まります。