BUFFALO BBR-4MG::シリアルコンソール

BBR-4MG

2003年11月に買ったBUFFALOのブロードバンドルータBBR-4MGで遊んでみました. 買った当時は4000円くらいしましたが,今は3000円くらいで買えるようです. 今回,ファームウェアを壊してしまってそのままでは使えなくなってしまったので, シリアルポート経由でファームウェアを書き込んでみました.

注意

ここに書いてある内容はかなり危険です. 最悪の場合,ルータが動かなくなるばかりか,PCのシリアルポートを破損する恐れもあります. それと,ファームウェアを書き換えた場合のトラブルはサポートの対象外だと思いますので, 自分で解決できる方のみお読みください. この文章を読んだ結果起こった,いかなる事故や損害についても,保障しません.

ファームウェアを見てみる

アップデート用のファームウェアをバイナリエディタで見るとzipで圧縮されてるのが 分かります.ファームウェアには2つデータが入っているので, それぞれのデータを保存すればヘッダも付いているので普通のソフトで展開できそうです.

実際に展開してみると,PFS.IMGとSOHO.BINというファイルが取り出せると思います. SOHO.BINはどうやらプログラムのようです. PFS.IMGには,WEB設定用のファイルが詰まってます. こっちは単純な構造なので,自分でも作れそうです.

シリアルポートを繋いでみる

買ってから一年もしないうちに,壊れたファームウェアを書き込んでしまって 使用不可能になってしまいました. 電源を入れても,赤いLEDが点滅するだけです. 192.168.1.11に繋いでみると,見慣れないページが出てファームウェアを アップロードしろと言われますが,そのページからは上手くできません. どうもこのメッセージはBUFFALOではなくてチップメーカーが用意したものの ようです.

その後,忙しかったり,体調が優れなかったりして1週間以上放置してたのですが, シリアルポートに繋いでみろと夢の中でお告げがあったので繋いでみました. シリアルコンソールの存在は,ファームウェアを眺めていたときに気づいたので, たぶん繋げば何かメッセージが見れるでしょう.

CPUの仕様を見ると3.3Vで動いているようです. シリアルポートに直接繋ぐと壊れそうなのでレベル変換をすることにします. ちょうど良いところに,携帯電話との接続用に作ったレベル変換の基盤が 部屋に落ちていたので,それをそのまま流用しました.

シリアルインターフェイス

CPUのデータシートを探したほうが早いような気もしますが, 多層基盤でパターンを追えないので,勘で接続します. といあえず,ピンが多い方は違うところに繋がってる気がしたので, 少ないほうから攻めます. そもそも,10(=5x2)ピンというのが作為的です.シリアルポートに繋げと言っています. とりあえず,GNDは一目瞭然なのでOK. あとは,ターミナルソフトが入ってなかったので,HSPで簡易通信プログラム (データを監視するだけ)を書いて,プログラムを動かしたまま,RDを色々な ところに繋いでみる. 電源を繋ぐと,上の列の真ん中のピンからデータが出てるようです. この時点で表示されてるのは意味不明な文字なので,パラメータをいじる. 115200bps,8ビットデータ,パリティー無し,ストップビット1にしたところ 見事に起動のメッセージが表示されていきます.

見ているだけでも面白いですが,復旧するためにはファームウェアを 転送しなければいけません. というわけで,SDをRDの右隣に繋いで見ると,データを受け付けてくれました. この時点で気づいた人もいるかもしれませんが,右上のピンを1番ピンとすると よくあるシリアルポートとピンの並びが同じです. 他のピンは分かりませんが,とりあえず3本繋げばデータのやり取りは出来るので これで行きます. ピンヘッダのメス側がちょうど部屋にあったので,BBR-4MG側に半田付けしなくて 済みました.

BBR-4MG

===========================================================
 BUFFALO BBR-4MG Loader v1.60 build Sep 24 2003 15:52:22
                 Broad Net Technology, INC.
===========================================================

read(0)= 24576 read(2)=16410
AMD Am29LV160DB bottom boot 16-bit mode found

Copying boot params.....DONE

Press any key to enter command mode ...
Press Reset button to enter Tiny_ETCPIP_KERNEL ...

Flash Checking  Passed.

Unzipping program from bank 2...done
Try to find image for running...
Unzipping program from bank 3...doneABCDEFGHIJDRAM
STCK
MAIN


[FLOW] Main() Begin ....
[GPIO FLOW] SetGpio() Begin ..
[GPIO FLOW] SetGpio() End.
[FLOW] Main() before call initialize_data_area() ..
##### _ftext      = 0x80001000
##### _fdata      = 0x8013C290
##### __bss_start = 0x80151278
##### end        = 0x806D47A4
##### Backup Data from 0x8013C290 to 0x807047A4
[FLOW] Main() afeter call initialize_data_area()

install_exception
sys_irq_init
memlib_init
hw5120cfg_init
ADMtek_GPIO_Init()
set GPIO 3 to output mode and enable with output value HI.
System startup...
soho initialize COLOR1 : 450000

manu_id=6000 chip_id=401A
AMD Am29LV160DB bottom boot 16-bit mode found
Set flash memory layout to Boot Parameters found !!!
Bootcode version: v1.60
Serial number: CXXXXXXXXX
Hardware version: 01
sizeof(struct III_Config_t) is 75980

manu_id=6000 chip_id=401A
AMD Am29LV160DB bottom boot 16-bit mode found
default route: 0.0.0.0
BufferInit:
BUF_HDR_SZ=32 BUF_ALIGN_SZ=0 BUFFER_OFFSET=96
BUF_BUFSZ0=384 BUF_BUFSZ1=1632
NUM_OF_B0=200 NUM_OF_B1=1100
BUF_POOL0_SZ=83200 BUF_POOL1_SZ=1830400
*BUF0=0x804d8f74 *BUF1=0x8031a164
Altgn *BUF0=0xa04d8f80 *BUF1=0xa031a170
End at BUF0:0xa04ed480, BUF1:0xa04d8f70

buffer0 pointer init OK!
buffer1 pointer init OK!
time = 01/01/2003, 00:00:00
Interface 0 ip = 127.0.0.1

ssmac_init begin ..
+Pafter my_if5120_init ..

if_adm51201: Ethernet address : 00 07 40 XX XX XX
time = 01/01/2003, 00:00:00
Interface 1 ip = 192.168.0.1


if_adm51202: Ethernet address : 00 07 40 XX XX XX
time = 01/01/2003, 00:00:00
Re-Init NAT data structure
Init NAT data structure
Interface 2 ip = 0.0.0.0

ruleCheck()> Group: 0,  Error: Useless rule index will be truncated
ruleCheck()> Group: 1,  Error: Useless rule index will be truncated
ruleCheck()> Group: 2,  Error: Useless rule index will be truncated
ruleCheck()> Group: 3,  Error: Useless rule index will be truncated
CBAC rule format check succeed !!
reqCBACBuf()> init match pool, Have: 1000
Memory Address: 0x806761a8 ~ 0x8067cf24
reqCBACBuf()> init timeGap pool, Have: 10000
Memory Address: 0x8067cf24 ~ 0x806adc78
reqCBACBuf()> init sameHost pool, Have: 2000
Memory Address: 0x806adc78 ~ 0x806bd698
[setClsfyEnable] clsfy_func=0
CBAC rule pool initialized !!
Init NAT data structure
RUNTASK id=1 if_task if0...
RUNTASK id=2 if_task if1...
RUNTASK id=3 if_task if2...
RUNTASK id=4 timer_task...
RUNTASK id=5 conn_mgr...
year=103,mon=0,day=1RUNTASK id=6 period_task...
RUNTASK id=7 dhcp_daemon...
RUNTASK id=8 dhcp_clt...on interface 2
httpd: listen at 192.168.0.1:1900
HTTPD TIMER_RESOURCE:5, FS_RESOURCE:6
RUNTASK httpd...
RUNTASK id=12 dnsproxy...
RUNTASK id=13 rip...
RUNTASK id=14 ripout...
RUNTASK id=15 pptp_callmgr...
RUNTASK id=16 dhcpd_mgmt_task...
UPnP is enabled
UPNP Device initialize success! slot=17
RUNTASK id=18 interrupt_read_task...
RUNTASK id=19 Receive_Server_Thread...
RUNTASK id=20 Alarm_Server_Task...
Starting Multitask...
MTstart2() begin  ...
RUNTASK id=0 period_task...
httpd: listen at 192.168.0.1:80
httpd: listen at 0.0.0.0:80
dnsproxy running...
IP_ADD_MEMBERSHIP: e0000009
[ripCreateSocket] join 224.0.0.9 on 127.0.0.1 ok!! [ifno=0]
IP_ADD_MEMBERSHIP: e0000009
[ripCreateSocket] join 224.0.0.9 on 192.168.0.1 ok!! [ifno=1]
dhcpd_mgmt_task started...
Receive_Server_Thread
+P4u+P1u+P2u+P3uset Interface 2 ip = 220.9.80.50
time = 01/01/2003, 00:00:05
##@@ Default_Route = 220.9.83.254
time = 01/01/2003, 00:00:05
IP_ADD_MEMBERSHIP: e0000009
Re-Init NAT data structure
Init NAT data structure
I got the gateway[220.9.83.254], default route ifno=[2]
init_NAT()>  default_ifno=2
Re-Init NAT data structure
Init NAT data structure
I got the gateway[220.9.83.254], default route ifno=[2]
init_NAT()>  default_ifno=2
IGMPv3 Membership Report

これは正常に起動した時のメッセージです. 起動直後にリセットボタンを押したり,ファームウェアが壊れていた場合は Tiny_ETCPIP_KERNELというのが起動されるみたいです. ただし,ルータとしての設定はほとんどできません.

ファームウェアのアップロード

無事にPCと通信できたら,今度はファームウェアのアップロードです. まずアップロードするファイルを作ります.これは簡単.

まず,BBR-4MG用のファームウェア をダウンロードしてきて,プログラムを実行して解凍します. 次に,Web領域とコード領域のデータを作ります. ファームウェアをバイナリエディタで開いて,最初のZIPデータと40000h以降のZIPデータを, web.binとcode.binという名前で保存します. 連続したFFhの部分やそのあとのサイズやチェックサムが付いてる部分は無くて良いようです.

ファームウェアのアップロードをするためには,コマンドモードに入る必要があります. ルータを起動したときに「Press any key to enter command mode ...」と表示されるので, キーを押してコマンドモードに入ります. あとは,エンターキーを押すとメニューが出るので,'U'を押して ファームウェアのアップロードのメニューに行きます. まずは,'2'を選んでWeb領域を書き込みます. メッセージにしたがって操作すれば,フラッシュメモリをクリアした後, データ待ちに入り「CC…」とCがいくつか出ているのでその間にデータを送ります. Xmodem(懐かしいですね)で送信できるようなので,ファイルはターミナルソフトから 送信できます. web.binの書き込みに成功したら,同じように,code.binも書き込みます. あとは,"G"を押せば,ルータが起動します.

正常に起動したら念のためWebの設定画面からファームウェアを書き込みなおしたほうが 良いかもしれません. コマンドモードからはファームウェアのチェックでエラーが出ても起動してしまうので, 次回起動時に止まる時があります.

ルータ動作中にエンターを押すと,SHIFT+0でデバッグモードに入るという メッセージが出るので,押してみたけど上手く行かない. 代わりにSHIFT-9で入れました.想定してるのは英字キーボードな配列なんですね. ここから出来ることは少ないですが,色々見れて楽しいです.

この文書の履歴

Copyright © 瓶詰堂 all rights reserved.