2018年11月25日日曜日

WHR-G300NをJTAGで修理してみた。

だいぶ前にOpenWRTとかDD-WRTのファームウェアをいじっていたWHR-G300Nを書き込みミスで破壊してしまったのでJTAGで修理してみることに。FlashがCFIなのでライターが無いし…
u-bootすら起動しないのでシリアルコンソールも無反応で、電源をいれると電源LEDは光るんだけど、DIAGランプが薄く赤く光ってる感じ。

WHR-G300Nを検索するとv1とv2があるようなんだけど日本だとWHR-G300Nといえばv1らしい。CPUがRalink RT3052Fのタイプ。
Flash ROMはMaxim 29LV320DBTI-70G(4MB)で、RAMはESMT M12L128168Aが2つで32MBっぽい。

JTAGは上の写真で言う右側の真ん中より少し下にある14PinのSMDピンヘッダのパットがある辺りがそれっぽい。RT3052FはMIPSアーキテクチャなのでMIPSの14PinのJTAGっぽい。
周りに1005サイズの抵抗のパッドも残っていたけど、とりあえずR28だけ装着すればJTAGが使えそう。(TDOの部分)
本当は100Ωとかをつけておくべきなんだろうけどとりあえずジャンパした。
SMDのピンヘッダをつけたかったんだけど、とりあえずJTAGで行けるのか試したかったのでまずはケーブルをハンダしてみた。

とりあえずUSB BlasterでPCとつないでurjtagで接続してみることに。Windows版がうまく動かせなかったのでLinux版をラズパイ上で動かしてみた。
jtag> cable usbblaster
jtag> detect
IR length: 5
Chain length: 1
Device Id: 00010011000001010010001001001111 (0x1305224F)
  Unknown manufacturer! (00100100111) (/usr/local/share/urjtag/MANUFACTURERS)
detectコマンドを送る直前ぐらいにWHR-G300NのACアダプタを差したらうまく認識するようになった。0x1305224FはRalink RT3052FのIDらしい。urjtagにRalinkの情報が入っていないからUnknownになってるけど。
とりあえず認識できたんだけどurjtagにRalinkのコンフィグがないので海外フォーラムを参考に適当なコンフィグを使用することに。MIPS系ならエンディアンが同じとか。
jtag> include admtek/adm5120/adm5120
ImpCode=01100000010000010100000000000000 60414000
EJTAG version: 3.1
EJTAG Implementation flags: R4k ASID_8 MIPS16 NoDMA MIPS32
Processor entered Debug Mode.
jtag> readmem 0x1f000000 0x30000 uboot
address: 0x1F000000
length:  0x00030000
reading:
CFIのフラッシュメモリはJTAGで書き込めるみたいなんだけど、現状どうなってるのか見るためにuboot領域だけ読み出してみることに。
しかしどうやらubootが動いてないので初期化処理がされてないためか全然読み出せない…
OpenOCDでやらないとだめかも。あちらはコンフィグファイルでフラッシュの初期化とか色々できるみたいだし。

ubootを焼いてTFTPでファームを流し込めばいいんだけど、とりあえず純正のubootをdumpしてくれてる人がいたのでこれをもらってきて書き込めば良さそう。
JTAGで全部焼くと時間がかかるので、ubootだけ焼いてTFTPでdd-wrtを流し込んだらそこから純正ファームウェアに戻してみるとか…
BuffaloのRalinkのubootは暗号化されたファームウェアを受け付けないらしいのでDD-WRTから純正ファームウェアに戻す用のファームウェアを焼かないといけないという面倒なやつ。フォーラムの方からWHR-G300N-webrevert.rarをダウンロードしておく。(ログオンしないと添付ファイルが見えない仕様になってるので、登録してログオンすると見つけられると思う。)


0 件のコメント:

コメントを投稿