dd-wrtバージョンアップ失敗時の復旧方法まとめ(WZR-HP-G301NH)

**dd-wrt**のファームウエア・バージョンアップに失敗した時の復旧方法をまとめました。対象機器は**Buffalo WZR-HP-G301NH**です。
なぜか管理画面でのアップデートに失敗し、エラーで立ち上がらなくなる確率がとても高いです。
先人の方々のリソースを最大限に利用し、復旧方法をまとめ整理しました。
かなりリスクの高い作業です、同じ手順で失敗しても当方は一切責任を負えません。自己責任でお願いします。

#1. パソコン環境

作業用パソコンのOSは**Ubuntu 14.10**です。Synapticパッケージマネージャで下記をインストールをします。

| パッケージ名 |　　　用途        |
|:-----------|:----------------|
|gtkterm     |シリアルポート接続用     |
|bless       |ファームウェア修正用|
|tftpd-hpa   |ファイル転送用     | 


パソコンの有線LANのIPアドレスを**192.168.11.2**に設定します。なお**WZR-HP-G301NH**ブート時のIPアドレスは**192.168.11.1**です。**192.168.11.1**にpingしても応答はありません。

![snapshot1.png](https://qiita-image-store.s3.amazonaws.com/0/63318/56d8c5ac-d25e-13b0-695d-3b3d7093d1f6.png)

#2. 必要なハードウェア

|ハードウェア|型式|備考|
|:-----------|:------------|:-------------|
|USB-UART変換モジュール|USB2UART-CP2102|3.3V対応|
|LANケーブル          |               |        |
|ピンヘッダ|               |        |
|ピンヘッダ用接続ケーブル|               |        |


**WZR-HP-G301NH**と**USB-UART変換モジュール USB2UART-CP2102**を結線します。
**WZR-HP-G301NH**のゴム足を剥がすとネジがあるのでトルクス・ドライバで外し、慎重にケースを開けます。シリアルポートのピン配置は画像の通りです。
![snapshot2.jpg](https://qiita-image-store.s3.amazonaws.com/0/63318/0810503d-5ff1-76d1-71c0-79d4b4cc05a4.jpeg)

**USB2UART-CP2102**です。
![snapshot3.jpg](https://qiita-image-store.s3.amazonaws.com/0/63318/45d349bf-6262-5ba8-26fa-fe61333eddc5.jpeg)

配線の組み合わせは下記の通りです。間違わないでください。

|**WZR-HP-G301NH**|**USB2UART-CP2102**|
|:-----------|:------------|
|**RX**|TXD|
|TX|**RXD**|
|GND|GND|
|VCC|**3.3V**|

#3. 大まかな作業の流れ

* dd-wrtホームから最新ファームウェアをダウンロードする。
* ファームウェアをtftp用に修正し、転送できる状態にする。
* **WZR-HP-G301NH**とパソコンを接続する(LAN接続とシリアルポート接続)。
* 修正したファームウェアを**WZR-HP-G301NH**へ転送し更新する。

#4. いざ覚悟して実行

###4.1. [dd-wrt Other Downloads](http://www.dd-wrt.com/site/support/other-downloads)から最新ファームウエアをダウンロードします。
今回は**12-15-2014-r25648版**を利用しました。

![snapshot4.png](https://qiita-image-store.s3.amazonaws.com/0/63318/2c3f3014-105e-7af6-af6a-c0b6ab5d8be4.png)
 
###4.2. **bless**でファームウェアを編集する。
**wzr-hp-g301nh-dd-wrt-webupgrade-MULTI.bin**を読み込み、
**"27 05 19 56"**より前を切り取り、 **wzr-hp-g301nh-dd-wrt-webupgrade-MULTI.tftp**に保存する。
![snapshot5.png](https://qiita-image-store.s3.amazonaws.com/0/63318/fd3369fa-edfc-2345-8d1c-3485b3fa2401.png)

###4.3. 修正したファームウェアを**tftpd**のディレクトリにコピーする。

**wzr-hp-g301nh-dd-wrt-webupgrade-MULTI.tftp**を**/var/lib/tftpboot**にコピーします。
![snapshot6.png](https://qiita-image-store.s3.amazonaws.com/0/63318/985dc059-4a7b-dce2-60a1-5c81c1181631.png)

###4.4. パソコンと**WZR-HP-G301NH**をLANケーブルで接続する。
**WZR-HP-G301NH**側はLAN 4ポートのいずれかに接続します。


###4.5. パソコンのUSBポートに**USB-UART変換モジュール USB2UART-CP2102**を接続する。

その後**WZR-HP-G301NH**の電源を入れます。
パソコンで**gtkterm**を実行し、通信ポートの設定をします。
きちんと文字が表示されれば大丈夫です。

|属性|値|備考|
|:-----------|:------------|:-------------|
|Port|/dev/ttyUSB0|USB2UART-CP2102の場合です|
|Baud Rate|115200 |                       |

![snapshot7.png](https://qiita-image-store.s3.amazonaws.com/0/63318/d1877a7f-671c-1982-b922-56ac11b577ef.png)

###4.6. ファームウエアの転送と更新をします。

まず**WZR-HP-G301NH**の電源を入れ直します。
**gtkterm**にブート・メッセージが表示されます。
**tftp server(recieve) go, waiting:4[sec]**が表示されたら**[Ctrl]+[c]**を連打して中断させます。
ファームウェアを自動転送させるような思わせぶりをしますが、実際にはされないので中断して手動でファイル転送します。

![snapshot8.png](https://qiita-image-store.s3.amazonaws.com/0/63318/4882d2b2-3c63-2a93-4b82-ec74b21bc5b3.png)

プロンプト**ar7100\>**が表示され、下記を入力するとパソコンからの転送が始まります。

> tftpboot 81f00000 wzr-hp-g301nh-dd-wrt-webupgrade-MULTI.tftp

![snapshot9.png](https://qiita-image-store.s3.amazonaws.com/0/63318/22d0ab19-c854-cd70-145d-08650da71e1d.png)

転送が終わったら転送されたデータサイズを確認します。
今回は**18e9000**です。
そしてプログラム領域を初期化します。処理終了まで結構時間がかかります。
> erase BE060000 BFFDFFFF

転送されたデータをプログラム領域にコピーします。ここで先程の**18e9000**を利用します。

> cp.b 81f00000 be060000 **18e9000**

処理終了まで結構時間がかかります。
終了したら**WZR-HP-G301NH**の電源を入れ直して終了です。

![snapshot10.png](https://qiita-image-store.s3.amazonaws.com/0/63318/3eedb7b2-8105-c8ad-22c6-b04074aedb56.png)

#5. 最後に
dd-wrtのWiFi設定は下記で利用してください。

|**パラメータ**|**値**|
|:-----------|:------------|
|Regulatory Domain|Japan|
|TX Power|10dBm|


#6. 参考サイト

* [物好き者 WZR-HP-G300NHの復旧作業を行いました](http://monozukisya.blog92.fc2.com/blog-entry-427.html)