シリアル接続でWZR-600DHP2に、DD-WRTやOpenWrtを焼いてみた

はじめに
---

BUFFALO WZR-600DHP2にWeb-GUIからDD-WRTをインストールしようとしたら、またもや再起不能になりました。やっちゃいました文鎮化。ツイてない！
でも大丈夫。箱を開けてシリアル接続すれば、意外と簡単に復旧させることができます。WZR-HP-G301NHと比べると雲泥の差です。ブートローダが賢くなっています。
さらに同じ方法でDD-WRTもOpenWrtもインストールできます。よかった！

参考：

- [dd-wrtバージョンアップ失敗時の復旧方法まとめ(WZR-HP-G301NH)](https://qiita.com/somainit/items/71a3d12a58827ab8d8b1)

まずはこれ
---

自己責任でお願いします。


箱を開けます
---

ここが一番の難所です。

参考：

- [コマンドまたはファイル名が違います。-WZR-600DHP2を分解](https://yuuya0x.at.webry.info/201309/article_1.html)

パソコンを設定します
---

:one:今回のOSはUbuntu 18.10です。
:two:LANポートのIPアドレスは**192.168.1.2**です。
:three:必要なパッケージをインストールします。

```shell-session
$ sudo apt-get install tftpd-hpa
$ sudo apt-get install screen
```

WZR-600DHP2とパソコンを接続します
---

:one:WZR-600DHP2のシリアル・ピンを確認します。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/4b22c833-f188-10c2-6679-99ac7ea5d0f4.jpeg">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/7912ffe3-8619-9783-ce95-fb47894ade79.jpeg">|
|:--:|:--:|

:two:WZR-600DHP2とUSB-UART変換モジュールを結線します。

今回は[USB2UART-CP2102](http://www.aitendo.com/product/2890)を利用しました。ピンの対応は下記のとおりです。

|WZR-600DHP2|USB2UART-CP2102|
|:--|:--|
|RX|TXD|
|TX|RXD|
|GND|GND|

:three:USB2UART-CP2102をパソコンのUSBポートに接続します。

/dev/ttyUSB0 として認識されました。

```shell-session
$ dmesg | grep cp210x
[  938.409962] usbcore: registered new interface driver cp210x
[  938.409988] usbserial: USB Serial support registered for cp210x
[  938.410031] cp210x 1-1.2:1.0: cp210x converter detected
[  938.412473] usb 1-1.2: cp210x converter now attached to ttyUSB0
```

:four:screenコマンドを実行し、WZR-600DHP2のコンソールを表示するようにします。

```shell-session
$ sudo screen /dev/ttyUSB0 115200,cs8,-parenb,-cstopb
```

:five:WZR-600DHP2の電源を入れます。

するとコンソールにブート画面が表示されます。


WZR-600DHP2にDD-WRTやOpenWrtを焼きます
---

:one:まずはコンソールを確認します。

これでわかること。

- ブートローダ起動直後、WZR-600DHP2のIPアドレスは**192.168.1.1**。
- tftpサーバのIPアドレスは**192.168.1.2**。
- tftpサーバのファイル**linux.trx-recovery**を転送しようとして失敗している。

```shell-session
Bootloader version v0.03 boot_version v0.03
Project name : WG9116H22
Press CTRL+C to cancel startup...
Device eth0:  hwaddr B0-C7-45-2C-BC-F9, ipaddr 192.168.1.1, mask 255.255.255.0
        gateway not set, nameserver not set
Invalid boot block on disk
Loader:raw Filesys:tftp Dev:eth0 File:192.168.1.2:linux.trx-recovery Options:(null)
Loading: Failed.
Could not load 192.168.1.2:linux.trx-recovery: Timeout occured
```

:two:ということで、下記を実施すればファームウェアを焼けると思いました。

- パソコンのIPアドレスを**192.168.1.2**にする。（既に実施済み）
- パソコンにtftpサーバ（tftpd-hpa）をインストールする。（既に実施済み）
- DD-WRTやOpenWrtのファームウェアをダウンロードし、tftpサーバのディレクトリ(/var/lib/tftpboot/)にファイル名**linux.trx-recovery**でコピーする。

**DD-WRTの場合**

```shell-session
$ wget https://download1.dd-wrt.com/dd-wrtv2/downloads/betas/2019/03-11-2019-r39144/buffalo_wzr-600dhp2/buffalo-wzr-600dhp2-webflash.bin
$ sudo cp buffalo-wzr-600dhp2-webflash.bin /var/lib/tftpboot/linux.trx-recovery
```

**OpenWrtの場合**

```shell-session
$ wget https://downloads.openwrt.org/releases/18.06.2/targets/bcm53xx/generic/openwrt-18.06.2-bcm53xx-buffalo-wzr-600dhp2-squashfs.trx
$ sudo cp openwrt-18.06.2-bcm53xx-buffalo-wzr-600dhp2-squashfs.trx /var/lib/tftpboot/linux.trx-recovery
```

:three:最後にWZR-600DHP2を再起動します。

そうするとファームウェアを取得し、新しいファームウェアで立ち上がります。

```shell-session
Bootloader version v0.03 boot_version v0.03
Project name : WG9116H22
Press CTRL+C to cancel startup...
Device eth0:  hwaddr B0-C7-45-2C-BC-F9, ipaddr 192.168.1.1, mask 255.255.255.0
        gateway not set, nameserver not set
Invalid boot block on disk
Loader:raw Filesys:tftp Dev:eth0 File:192.168.1.2:linux.trx-recovery Options:(null)
Loading: ... 27779072 bytes read
Entry at 0x010a3c38
Reading from 0x010a3c38: Programming...done. 27779072 bytes written
Booting(1): boot -raw -z -addr=0x8000 -max=0xef8000 nflash0.os2:
Loader:raw Filesys:raw Dev:nflash0.os2 File: Options:(null)
```

:four:OSが立ち上がったら、WZR-600DHP2とパソコン間のLANケーブルを抜きます。

再度ファームウェアを取得しないようにするためです。

:five:コマンドscreenを終了するには、[Ctrl]+[a][k]を入力します。

:six:USB2UART-CP2102をパソコンから取り外します。


さいごに
---

ださださオリジナル・ファームウェアを捨て、DD-WRTやOpenWrtでプロ仕様のルータ機能を楽しみましょう。(=^・^=)