2015年3月14日土曜日

Buffalo WHR2-A54G54 が JTAG で復旧

OpenWrt をインストールした後、NVRAM の初期化を行ったところで起動しなくなってしまった WHR2-A54G54 ですが、無事 JTAG を使って復旧させることに成功しました。

JTAG により復旧させた WHR2-A54G54 です。
DD-WRT では、起動に 1 分程度の時間が掛かります。

作業に当たっては DD-WRT と OpenWrt の JTAG のページを参考にしました。
dd-wrt.com JTAG
http://www.dd-wrt.com/wiki/index.php/JTAG

OpenWrt Wireless Freedom JTAG
http://wiki.openwrt.org/doc/hardware/port.jtag


JTAG 用のピンヘッダ (2x6) を取り付けました。
すぐ脇の台座が水色のピンヘッダはシリアルコンソール用です。

JTAG で作業

昨日、製作したプリンタ・ポートを利用する JTAG ケーブルと JTAG 制御用ソフトウェアの HairyDairyMaid_WRT54G_Debrick_Utility を使いました。このツールの関係で、いつもの Debian Linux などではなく、Windows XP を使用して作業を行いました。HairyDairyMaid_WRT54G_Debrick_Utility の使い方の説明はこの記事では行いませんのでご了承ください。プリンタ・ポートと JTAG ソフトウェアの wrt54g.exe の間を繋ぐドライバ giveio.sys のインストールと起動が事前に必要なことが注意点です。私もハマりました(笑)。
HairyDairyMaid_WRT54G_Debrick_Utility_v48.zip
http://sourceforge.net/projects/zjtag/files/hairydairymaid/v4.8/

JTAG 用ケーブルを接続して制御を行なっているところです。

JTAG で NVRAM の消去を試みる

具体的な作業としては、最初に NVRAM の消去を行いました。しかし、再起動しても OpenWrt が起動することはありませんでした。
wrt54g.exe -erase:nvram

====================================
WRT54G/GS EJTAG Debrick Utility v4.8
====================================

Probing bus ... Done

Instruction Length set to 8

CPU Chip ID: 00000100011100000100000101111111 (0470417F)
*** Found a Broadcom BCM4704 Rev 8 CPU chip ***

    - EJTAG IMPCODE ....... : 00000000100000000000100100000100 (00800904)
    - EJTAG Version ....... : 1 or 2.0
    - EJTAG DMA Support ... : Yes

Issuing Processor / Peripheral Reset ... Done
Enabling Memory Writes ... Done
Halting Processor ... ... Done
Clearing Watchdog ... Done

Probing Flash at (Flash Window: 0x1fc00000) ... Done

Flash Vendor ID: 00000000000000000000000011000010 (000000C2)
Flash Device ID: 00000000000000000010001010100111 (000022A7)
*** Found a MX29LV320T 2Mx16 TopB      (4MB) Flash Chip ***

    - Flash Chip Window Start .... : 1fc00000
    - Flash Chip Window Length ... : 00400000
    - Selected Area Start ........ : 1fff0000
    - Selected Area Length ....... : 00010000

*** You Selected to Erase the NVRAM.BIN ***

=========================
Erasing Routine Started
=========================
Total Blocks to Erase: 8

Erasing block: 64 (addr = 1fff0000)...Done
Erasing block: 65 (addr = 1fff2000)...Done
Erasing block: 66 (addr = 1fff4000)...Done
Erasing block: 67 (addr = 1fff6000)...Done
Erasing block: 68 (addr = 1fff8000)...Done
Erasing block: 69 (addr = 1fffa000)...Done
Erasing block: 70 (addr = 1fffc000)...Done
Erasing block: 71 (addr = 1fffe000)...Done
=========================
Erasing Routine Complete
=========================
elapsed time: 3 seconds


 *** REQUESTED OPERATION IS COMPLETE ***

JTAG で NVRAN と カーネル の消去を試みる

そこで NVRAM と一緒に KERNEL も消去してみました。どうも NVRAM と KERNEL を消去することで、バッファロー社の無線 LAN ルータは再び TFTP による流し込みインストールが可能となる場合が多いとの情報があったためです。
wrt54g.exe -erase:nvram
wrt54g.exe -erase:kernel

TFTP で流し込みインストール

再起動の時、TFTP による流し込みインストールの準備を行なってみました。一度目の TFTP インストールはタイムアウトで失敗しました。再び挑戦すると、今度は TFTP の流しこみを受け付けて、インストールに成功しました。インストールしたファームウェアは、WHR3-AG54 で 5GHz 帯が動作した DD-WRT (Broadcom VINT std-Webflash image = dd-wrt.v24-13941_VINT_std.bin)です。なお流し込み先の IP アドレスは、バッファロー社 初期 IP アドレスの 192.168.11.1 でした。

インストールが終了した後、インストールを行ったパソコンの IP アドレスの再設定を行ったところ WHR2-A54G54 の DD-WRT から IP アドレスの配信(192.168.1.100)を受けました。そしてブラウザで 192.168.1.1 へアクセスしたところ、ちゃんと設定画面へとたどり着きました。また、すでに設定済みの初期値も異常な値ではなく、一般的な DD-WRT の初期値となっていました。DD-WRT のインストールも正常に成功していました。

早速、無線LAN環境を確認してみると、ちゃんと無線デバイスが二つある表示となっていました。そして設定も行えました。しかし 5GHz 帯のものしか通信が出来ませんでした。何故か 2.4GHz のものは、電波が発射され ESSID も確認ができるのですが通信が出来ないのです。それもセキュリティ無しの状態でもです。

5GHz 帯の動作を示す WIRELESS 1 の LED ランプが点滅していました。

2.4GHz 帯は Tomato ファームウェアでちゃんと通信が出来ていただけに、ちょっと納得の出来ないところです。今後の課題としたいところです。

今回 JTAG で復旧した WHR2-A54G54 (左)と
シリアルコンソールで復旧した WHR3-AG54 (右)です。

分解時に爪を折ってしまった WHR2-A54G54 の天板のカラー部品です。
固定できないため、透明フィルムベースの両面テープで固定してみました。しかしテープの場所がしっかり判ります(笑)。

JTAG 用ソフトウェア

さて今回の JTAG での作業ですが、ソフトウェア探しで苦労しました。

OpenOCD

当初は Debian Wheezy にもある OpenOCD の使用を考えていました。しかしどうも使い方が解らないのです。ターゲット設定ファイルが必要なのですが、BCM4704 に必要な設定が、バージョン 0.5.0 に見当たらないのです。そこで BCM47xx.cfg というターゲット設定ファイルが存在するバージョンの 0.8.0 をソースコードからビルドしてインストールしてみました。しかしターゲット設定ファイルの bcm47xx.cfg に問題があるようで、エラーで停止してしまいます。現時点では、私には問題解決が難しそうでした。

UrJTAG

他にはないかと調べてみると UrJTAG がありました。とりあえず動作もするようですが、ターゲットとなるハードウェアの検査(プローブ)さえ出来ないのです。何か動作しているのですが、結果とあるプロセッサなどの情報が戻ってこないのです。

HairyDairyMaid_WRT54G_Debrick_Utility

このまま行き詰ってしまうのかと頭を悩ませてしまいました。もしかして JTAG ケーブルに問題があるのでは・・・との思いもありました。そこでネット上で WHR2-A54G54 を JTAG 制御している記事を発見して、そこで使われているソフトウェアのHairyDairyMaid_WRT54G_Debrick_Utility を使ってみることとしました。名前から Linksys WRT54G シリーズの無線 LAN ルータを対象としたソフトウェアのようですが、ブロードコム社のチップであれば、だいたい動いてしまうようです。

上記の記事のように、無事に JTAG 制御を行うことができて、それも JTAG ケーブルも問題なく?動作していることが確認出来ました。
 JTAG ケーブルについては、D-SUB 25 Pin のコネクタが古くなっていて、接触が思わしくなく、無線LANルータのフラッシュメモリのデータバックアップ中に DMA エラーが発生することもありました。そのため、確実を期すために、連続して二回バックアップ作業を行なって、それぞれのハッシュ(md5)を比較して、同じ値であることを確認した上でバックアップデータとしました。なおバックアップしたデータは、フラッシュメモリ全体とフラッシュメモリの先頭部にある CFE と呼ばれる部分です。
wrt54g.exe -backup:cfe
wrt54g.exe -backup:wholeflash
4MB のフラッシュメモリ全体のバックアップには、およそ20分から30分の時間が掛かりました。

参考ブログ

あたらし物好きの実験ブログ WHR2-A54G54 その1
http://yasuz2.blog80.fc2.com/blog-entry-19.html

あたらし物好きの実験ブログ WHR2-A54G54 その2
http://yasuz2.blog80.fc2.com/blog-entry-20.html

あたらし物好きの実験ブログ WHR2-A54G54 一歩前進
http://yasuz2.blog80.fc2.com/blog-entry-21.html

あたらし物好きの実験ブログ WHR2-A54G54 復活
http://yasuz2.blog80.fc2.com/blog-entry-22.html

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。