2015年5月5日火曜日

Linksys WRT150N へ JTAG アクセスと Tomato のインストール

無線LANルータが増えすぎて(笑)、運用休止中の リンクシス WRT150N を分解して、内部のシリアルコンソールと JTAG ポートへピンヘッダを設置して、フラッシュメモリのバックアップと Tomato ファームウェアのインストールを試みてみました。

今回分解した Linksys WRT150N です。

随分と昔にインターネット・オークションにて入手した後、DD-WRT をインストールしたままの状態で使っていました。そろそろ Shibby 版の Tomato ファームウェアへ切り替えたいと思っていましたが、使用されている制御チップが BCM4704 という、今まで NVRAM の初期化で悩まされてきたものでした。うっかり Tomato ファームウェアなどをインストールすると、再び NVRAM を何とか初期化しなければ正常に動作しなくなる可能性もあり、なかなかインストールの踏ん切りがつきませんでした。

WRT150N の背面の様子です。

しかし今回、分解をしてシリアルコンソールと JTAG 端子を設けることとなったため、Tomato ファームウェアのインストールに踏み切ることができました。

分解作業

以下の写真は、WRT150N の分解の様子です。YouTube に WRT150N の分解手順を案内した動画ありした。これを参考にしました。
How to Disassemble/Open/Take Apart WRT150N WIFI Wireless Router
https://www.youtube.com/watch?v=VLcfl0ORuCY

分解は側面パネルの取り外しからです。
細いドライバを背面の隙間から押し込み、こじ開けます。
側面パネルを撤去したところです。
左右の側面パネルを撤去します。
側面パネルの爪の様子です。合計8箇所の爪があります。
側面パネルを撤去すると、前面パネルを撤去します。
前面パネルには合計4箇所の爪があります。
次に底面カバーを撤去します。
ここも細いドライバを差し込んでこじ開けます。
底面カバーを外した様子です。
手前の二箇所の穴に底面カバーのフックが咬み合っていました。
また前方はフックで挟まっているだけの状態でした。
これは底面カバーの裏側です。
手前の二箇所の円筒状のものが本体へ固定するフックです。
底面の四カ所のネジ(ヘクスグローブ T10 )を撤去すると筐体を上下に分割できます。
内部のプリント印刷基盤の様子です。
アンテナ・ケーブルは直接ハンダ付けされていたため、ピンヘッダの設置には、ケーブルに負担が掛からないように注意しながらの作業となりました。

ピンヘッダの設置

ここからはシリアルコンソールと JTAG のピンヘッダの取り付けです。

プリント印刷基盤のシリアルコンソールのポート(左側 5 ピン)と JTAG のポート(右側 12 ピン)の様子です。
スルーホールにはハンダが詰まっている状態でした。
ハンダ吸い取り器を使って裏面からスルーホールのハンダを吸い出しました。
ピンヘッダを取り付けたところです。
左側のシリアルコンソールのものは、端の Vcc 端子は使わないので、ピンヘッダを事故防止のために取り付けませんでした。

シリアルコンソール

パソコン(Debian Wheezy)からシリアルケーブルで接続してみたところです。

シリアルコンソールのピンヘッダへシリアル・ケーブルを取り付けてパソコンからアクセスしてみました。

端末から次のコマンドでシリアルコンソールへ接続しました。
# chown uucp /dev/ttyUSB0
# cu -l /dev/ttyUSB0 -s 115200

JTAG でアクセス

JTAG でアクセスを試みてみました。本機では、Linksys E3000 であったような、各種のオプションを付加することなく、単純にケーブルのオプションだけで接続が可能でした。

シリアルコンソールに引き続いて、JTAG ポートにもケーブルを接続してみました。

プローブ動作を行なってみました。

# ./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 0x9470417F

Probing bus ... Done

Instruction Length set to 8

CPU Chip ID: 10010100011100000100000101111111 (9470417F)
*** Found a Broadcom BCM4704 KPBG Rev 9 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 4704
Chip Rev 9
Package Options 0
Number of Cores 0
Core Revision 79
Core Type 700
Core Vendor ID 90000
Flash Type 700
Flash Type = PFLASH
Dest is bits 0
Flash is byteswapped 0
Endian Type is LE 0
PLL Type 00020000
Enter Flash Probe

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

Flash Vendor ID: 00000000000000000000000000000001 (00000001)
Flash Device ID: 00000000000000000010001011110110 (000022F6)
*** Found a AMD 29lv320DT 2Mx16 TopB   (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 ***
フラッシュメモリのバックアップも行いました。
# ./tjtag3 -backup:cfe /cable:DLC5
# ./tjtag3 -backup:wholeflash /cable:DLC5

JTAG 経由でフラッシュメモリのバックアップを行なってみました。

Shibby 版の Tomato ファームウェアのインストール

シリアルコンソールへのアクセスと JTAG によるフラッシュメモリのバックアップが終了したところで、Shibby 版の Tomato ファームウェア(tomato-ND-1.28.5x-124-VPN.trx)をインストールしてみました。

シリアルコンソールから TFTP による流し込みインストールの起動を行なって、パソコンから TFTP でファームウェアを流しこみを行いました。

シリアルコンソール側での操作
CFE> nvram erase
TFTP 側の put コマンドの直後に以下のコマンドを実行
CFE> flash -noheader : flash1.trx

TFTP 側の操作
# tftp 192.168.1.1
TFTP> binary
TFTP> trace
TFTP> rexmt 1
TFTP> timeout 60
TFTP> put tomato-ND-1.28.5x-124-VPN.trx
WRT150N へ書き込みが開始されると次のようにメッセージが表示されました。Programming...の部分でしばらく停止します。この間にフラッシュメモリへファームウェアの書き込みを行なっています。 "command status = 0" と応答があれば書き込み成功です。
CFE> flash -noheader : flash1.trx
CMD: [flash -noheader : flash1.trx]
Reading :: _tftpd_open(): retries=0/5
Stop to blink diag led ...Done. 3465216 bytes read
fname=flash1.trx
Programming...done. 3465216 bytes written
*** command status = 0
CFE>
ファームウェアの書き込みが終了したところで、WRT150N の電源を再投入して、再起動させた後、動作確認を行なってみました。ブラウザから 192.168.1.1 へアクセスすると管理画面へのパスワードの問い合わせがあります。ユーザ:"root" 、パスワード:"admin" でアクセスしてください。

いきなり目に飛び込んできたのは、意外なルータ型番で認識された Overview (概要)のページでした。何と! "WRT150N" のはずが "WRT300N v1" と認識されていました。どうもどちらも同じハードウェア構成の製品のようです。

Tomato の Overview のページです。
"WRT300N v1" と認識されていました。

とりあえず Shibby 版の Tomato ファームウェアのインストールまで出来ましたが、今後のインストールのことも考えて、シリアルコンソールの端子を筐体の外部から接続できるように筐体を改造したいと思っています。改造ができましたら、このブログにて紹介いたします。

参考ページ

dd-wrt.com -- Linksys WRT150N & WRT160N
http://www.dd-wrt.com/wiki/index.php/Linksys_WRT150N_%26_WRT160N

dd-wrt.com -- Serial Recovery
http://www.dd-wrt.com/wiki/index.php/Serial_Recovery

0 件のコメント:

コメントを投稿

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