BUFFALO 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側に半田付けしなくて済みました.
=========================================================== 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で入れました.想定してるのは英字キーボードな配列なんですね.ここから出来ることは少ないですが,色々見れて楽しいです.
この文書の履歴
- 2004-10-15 公開
- 2004-10-16 こっそり校正
- 2004-10-22 ファームウェアの改造について追加
- 2005-09-27 こっちで公開&分割