以前ハードオフで108円で手に入れた、CATVのルーターをいじってみました。
このルーターはBCM3383を使ったものです。このチップはBroadcomのCATV用のMIPS SOCです。
シリアルのピンはハーフピッチでパターンが接続されてなかったので、使えるようにいじりました。
115200で以下のメッセージが確認できます。
BCM338332 TP0 346890
MemSize: 128 M
Chip ID: BCM3383G-B0
BootLoader Version: 2.6.0-15-gac1e Release Gnu spiboot reduced DDR drive
Build Date: Mar 13 2015
Build Time: 15:41:05
SPI flash ID 0xc22018, size 16MB, block size 64KB, write buffer 256, flags 0x0
parameter offset is 40788
Auto tftp boot mode!! try to connect TFTP to doandload manufacture f/w!!
Signature/PID: 3383
Switch detected: 53125
ProbePhy: Found PHY 0, MDIO on MAC 0, data on MAC 0
Using GMAC0, phy 0
Enet link up: 1G full
Press any key within 0 seconds to abort tftp upgrade.
cfeやu-bootではないようです。何かキーを入力するとメニューが出てきます。
Main Menu:
==========
b) Boot from flash
g) Download and run from RAM
d) Download and save to flash
e) Erase flash sector
m) Set mode
s) Store bootloader parameters to flash
i) Re-init ethernet
k) Reconfig TFTP Info
c) Back to Default
v) Set tftp boot mode
M) Set boot mode
r) Read memory
w) Write memory
j) Jump to arbitrary address
X) Erase all of flash except the bootloader
z) Reset
ブートも作らないとだめかと思っていたのですが、いろいろ試したら使えそうなので、このブートを使うことにしました。
iやkでネットを設定してsして保存します。
freebsdのsys/mips/mips/locore.Sに一文字出力を入れます。
uartのアドレスは
shared/broadcom/include/bcm963xx/3383_map.h
というソースにあり、uartのレジスタの構成は
shared/broadcom/include/bcm963xx/bcm3383/uart.h
にあります。
GLOBAL(btext)
ASM_ENTRY(_start)
VECTOR(_locore, unknown)
li t0, 0xb4e00500
li t1, 0x55
sw t1, 0x14(t0)
これでビルドしてProgramStoreというプログラムでkbinをイメージにします。ProgramStoreはbroadcomのaeolusというレポジトリにあったのですが、64ビット環境でビルドするとおかしな動作になったので、直してZRouterに入れました。
ProgramStoreにたどりついたのはflashの中にあったecram_sto.binという文字列をgithubで検索したら、下記のページが出てきました。
イメージをgコマンドでtftpして起動してみます。Switchの初期化が遅いのか電源投入後しばらくしないとネットワークが使えません。
TFTP Get Selected
Board TFTP Server IP Address [10.10.10.3]:
Enter filename [freebsd.bin]:
Destination: a5f00000
Destination: a5f00000
Starting TFTP of freebsd.bin from 10.10.10.3
Getting freebsd.bin using octet mode
......................................
Tftp complete
Received 2230045 bytes
Image 3 Program Header:
Signature: 3383
Control: 0001
Major Rev: 8271
Minor Rev: 8486
Build Time: 2024/4/17 10:09:05 Z
File Length: 2229953 bytes
Load Address: 80040120
Filename: /tmp/freebsd.bin
HCS: 3cd6
CRC: 601643df
Store parameters to flash? [n]
Performing CRC on Image 3...
CRC time = 48243367
Detected LZRW1/KH compressed image...decompressing...
Target Address: 0x80040120
Decompressed length: 3366416
Executing Image 3...
BOOT PARAM STRING(0x800008c4): HMXBLPA]BOOTMODE=normal;OFFSET=40788;
U
ブートできました。
BCM3383を使って面白そうなことしてる人見つけました。
どうもこれは、片側のThreadでecosが動いていて片側でLinuxが動いているシステムでecosを操っているようです。