0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CFEもビルドしてみた。

Last updated at Posted at 2019-01-24

たまたま転がり込んで来たBCM3380というSOCをいじってみました。BCM3380はBroadcomの最後の頃のmips SOCで珍しい4Kcのマルチコアです。

ターゲットはこれです。

CATVのケーブルモデム用のSOCでJ:COMで使われているNetgearの製品にも入っているようです。

BCM33xxはCATV用でBCM63xxはADSL用で提供されていました。CPUなどは共通のものが使われていてBCM3380はBCM6328に近いと思われます。BCM6328とBCM6318が同じ世代でその前はBCM6368はBCM6358と同じ世代になり、その前の世代はBCM6338とBCM6348がありました。BCM6348はBCM3348と同等と考えられます。63系は68の次に18になりましたが33系はリニアに数字が大きくなったようです。

SPI SOP 16PなFlashなのではがして、DIPなソケットを付けてみました。

写真(2018-06-13 10.07).jpg

ちょっと高くなりすぎてシールドにあたってしまうので、今度もう少し低い変換を作ります。^ ^;

オリジナルのまま起動してみるとブートとファームが一体化していて、ブートで止めたりコマンドオペーレションをする事が出来ないようです。

これはおそらくeCosを使っていてRedBoot入れずにeCosから直接ファームを起動しているのではないかと想像されます。

しかたがないので、とりあえずブートを作るところからです。

u-bootを移植した人がいるようです。

最近のu-bootはLinuxへの依存が強くなっていて、FreeBSDのLinuxエミュレーションではビルドできなさそうなので、これを使う事はあきらめました。

GPLで提供されているBCM3380のソースにeCosなソースがありましたが、これはRedBootではないので、こちらもあきらめました。

上のu-bootのpatchを見るとBCM6348などをベースに修正している事が分かります。

BCM63xxなブートを探してみたところcfe_bcm63xxというコードがありました。これをBCM33xx用に修正する事にしました、

BCM3380に一番近いと思われるBCM6358をベースにします。

レジスタのアドレスが下記のファイルにあるのでUARTなどのアドレスを書き換えます。

shared/broadcom/include/bcm963xx/6358_common.h

ビルドは以下のディレクトリでgmakeで実行します。gccなどのLinux用のtoolchainはアーカイブに入っていて、いくつかのMakefileをいじったところバイナリは出来ました。

cfe/build/broadcom/bcm63xx_rom

ところがバイナリが極端に小さいのです。Flashに焼いて実行しても何も起きません。

コードをおってみたところ、このディレクトリでビルドできるものは、プリブートローダーで、以下のディレクトリでビルドしたものが実際のCFEのブートローダーのようです。

cfe/build/broadcom/bcm63xx_ram

このディレクトリでビルドするとバイナリが出来て、それをromのディレクトリにflashimg.Sというファイルでダンプして入れ込むようです。

そのダンプ用のツールのhostTools/cmplzmaがなぜかlzmaの圧縮がうまくできないため、デバッグするのも面倒なのでZRouterのoldlzmaを使ってあらかじめ圧縮して、ダンプだけのコマンドに修正しました。

これでそれっぽいバイナリが出来たのですが、やはり起動しません。

コードを読みなおしてCFG_MULTI_CPUSという定義があったので、下記のファイルの定義を0から1にしてみました。

cfe/cfe/arch/mips/board/bcm63xx_ram/include/bsp_config.h

ところがramでビルドするとエラーで通りません。しかたがないので、とりあえずramの時は0でromの時に1にしてビルドしました。

焼いてみたところ、UARTから文字が出力される事が確認できました。

HELO
DRAM

SETLEDS('H','E','L','O')のようなマクロで、4文字をUARTに出力するようになっています。

UARTがつかえるようなればもうこちらのものです。

と思ったのですが、メモリコントローラーの初期化など結構ハードル高かったです。長期戦になりそうです。

https://oldwiki.archive.openwrt.org/doc/hardware/soc/soc.broadcom.bcm33xx
https://oldwiki.archive.openwrt.org/doc/hardware/soc/soc.broadcom.bcm63xx
https://wikidevi.com/wiki/Broadcom

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?