2015年7月18日土曜日

Linksys WRT54G の分解と JTAG アクセス

先日入手した無線 LAN ルータ詰め合わせセットの中に入っていたリンクシス WRT54G Ver.2 を分解してみました。そして JTAG 端子とシリアルコンソールの端子を追加して JTAG アクセスを行なってみました。

今回分解した リンクシス WRT54G です。

分解作業

WRT54G の分解は、以前にも故障してしまった同型機で行なっています。分解のポイントなどはそちらの記事を参照してください。
Linksys WRT54G を分解
http://near-unix.blogspot.jp/2013/06/linksys-wrt54g_19.html

分解した内部はかなりホコリが積もっている状態でした。どうもホコリの多い環境で使用されていた模様です。こうして分解して掃除をする機会を得ることができました。

分解直後のプリント印刷基盤の様子です。
表面に多くのホコリが降り積もっていました。

筐体の洗浄

そして筐体もレンジ周り用強力アルカリ洗剤で水洗いしました。洗剤を吹き付ける前に、必ず筐体は濡らした状態で行なってください。乾いた状態の筐体へ直接洗剤を吹き付けると洗浄斑になってしまいます。

洗浄中の WRT54G の筐体部品です。
下には傷防止の雑巾を敷いています。

JTAG とシリアルコンソールへピンヘッダの取り付け

プリント印刷基盤の表面を水分を含ませた刷毛で綺麗に掃除をした後、いよいよ JTAG とシリアルコンソールのピンヘッダをハンダ付けします。いつものようにハンダの吸取り器を使ってスルーホールを一個ずつ処理しました。アースパターンが多いこのプリント印刷基盤ですが、意外とスルーホールのハンダの吸取りは楽に行うことができました。ハンダの吸取り処理が終わったところで、ピンヘッダをハンダ付けしました。

JTAG のスルーホールの様子です。
そして JTAG 端子のプルアップ抵抗器に 4.7KΩ が使用されているのが見えます。
JTAG と シリアルコンソールへピンヘッダを取り付けたところです。

JTAG でフラッシュメモリのバックアップ

ピンヘッダのハンダ付けが終わったところで、早速 JTAG 経由でフラッシュメモリのバックアップを行なってみました。今回も二種類のケーブル(DLC5, WIGGLER)で比較をしてみました。

DLC5 ケーブルで JTAG アクセスをしているところです。
WIGGLER ケーブルで JTAG アクセスをしているところです。
3.3V の電源はシリアルコンソールの端子から供給しています。

まずはプローブ動作をさせて様子を観察してみました。繰り返してプローブ動作をさせることも行いましたが、二種類のケーブルとも安定に動作をしていました。

# ./tjtag3 -probeonly /cable:DLC5

================================================
EJTAG Debrick Utility v3.0.2.1 Tornado-MOD
================================================

Detected IR chain length = 8
Number of device(s) = 1

IDCODE for device 1 is 0x1471217F

Probing bus ... Done

Instruction Length set to 8

CPU Chip ID: 00010100011100010010000101111111 (1471217F)
*** Found a Broadcom BCM4712 Rev 1 CPU chip ***

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

Intial value of Control register is 0000000C
Intial value of status register is 0000007F
01111111 (0000007F)

Status bit 7 Busy Inverted pin 11 = 1
Status bit 6 *Ack pin 10 = 1
Status bit 5 Paper-out pin 12 = 1
Status bit 4 Select pin 13 = 1
Status bit 3 *Error pin 15 = 1
* means low = true, e.g., *Error

VCC connected
values of Control register after init 0x0000000C
value of status register after init 0x0000007F
system reset complete

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


Chip ID 4712
Chip Rev 1
Package Options 0
Number of Cores 8
Core Revision 79
Core Type 710
Core Vendor ID 8010000
Flash Type 700
Flash Type = PFLASH
Dest is bits 0
Flash is byteswapped 0
Endian Type is LE 0
PLL Type 00008000
Enter Flash Probe

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

Flash Vendor ID: 00000000000000000000000010001001 (00000089)
Flash Device ID: 00000000000000001000100011000101 (000088C5)
*** Found a Intel 28F320C3 2Mx16 BotB (4MB) Flash Chip ***

- Flash Chip Window Start .... : 1FC00000
- Flash Chip Window Length ... : 00400000
- Selected Area Start ........ : 00000000
- Selected Area Length ....... : 00000000



*** REQUESTED OPERATION IS COMPLETE ***

次に CFE 部分のバックアップをしてみました。二種類のケーブルとも二回ずつバックアップを行い MD5 のハッシュ値を計算してバックアップデータが同一であることを確認しました。
61fc70c281d44291948c9ceb0505f38d CFE.BIN.SAVED_20150718_141356
61fc70c281d44291948c9ceb0505f38d CFE.BIN.SAVED_20150718_140911

61fc70c281d44291948c9ceb0505f38d CFE.BIN.SAVED_20150718_140251
61fc70c281d44291948c9ceb0505f38d CFE.BIN.SAVED_20150718_135130

上段の赤字部分は、DLC5 ケーブルでバックアップしたもののハッシュ値です。
下段の青字部分は、WIGGLER ケーブルでバックアップしたもののハッシュ値です。
問題はフラッシュメモリ全体のバックアップで発生しました。バッファー回路を持っている WIGGLER ケーブルは二回のバックアップのハッシュ値が一致しましたが、抵抗器で構成された DLC5 ケーブルでは、同じケーブル同士でもハッシュ値が異なり、更には WIGGLER ケーブルとも異なっていました。
beeff5fa94556fe643a9cf00b446db9b  WHOLEFLASH.BIN.SAVED_20150718_173831
2bb7f691dea569d32f73a8d92008edfb  WHOLEFLASH.BIN.SAVED_20150718_162906


4c3418fb596d2390e9048a42614a594e  WHOLEFLASH.BIN.SAVED_20150718_152417
4c3418fb596d2390e9048a42614a594e  WHOLEFLASH.BIN.SAVED_20150718_142000

上段の赤字部分は、DLC5 ケーブルでバックアップしたもののハッシュ値です。
下段の青字部分は、WIGGLER ケーブルでバックアップしたもののハッシュ値です。
この結果から、BCM4712 が搭載された WRT54G Ver.2 においては、WIGGLER ケーブルの方が安定して動作しているようです。

どうして転送容量の大きいフラッシュメモリ全体のバックアップで違いが発生してしまうのかは不明です。ここでフラッシュメモリへの書き込みテストも行いたかったのですが、読み出しでこの状態だとうっかり書き込んでしまって元に戻らないことが心配だったので、今回はフラッシュメモリへの書き換えを行なっていません。

WRT54G のフラッシュメモリをバックアップの様子です。



0 件のコメント:

コメントを投稿

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