オリジナルfirmwareへの復旧方法 > HTTP転送 > firmware転送(Buffalo)

Broadcom Arm系SoCを使ったBuffaloの一部のルータでのみHTTP転送が可能です。

※2018/1/5現在でWZR-900DHPではLEDE/DD-WRT書き換え後、無線出力が極端に減衰する事象が報告されています。(5GHz帯使用不可、2.4GHz帯が5mも届かない)
 Broadcom bcm53xx targetの他メーカ機種での報告ではflashメモリ上に暗号化して配置された無線LANチップ用firmwareをロードできないためと想定されています。
 この暗号化されたfirmwareはメーカー配布のfirmware imageには含まれておらず、事前取得したflashメモリのフルバックアップ以外では復旧できないようです。
 Buffaloのbcm53xx系機種(WZR-600DHP2以降/900DHP/1166DHP/1750DHP/1900DHPなど)へLEDE/DD-WRTをインストールする際にはご注意ください。

概要

bootloader経由のインストール (1)WZR-900DHP編 と同様の手順でBootloaderのCFEに内蔵された「mini CFE Web Server」にHTTPでアクセスしてファームウェアを転送し、リカバリします。

ただ、純正ファームウェアはサイズが大きいため、AOSSボタンを押下+curlを使用した手順では転送時間が間に合いません。
そこで一度 OpenWrt/LEDEをインストールし、nvram コマンドでboot_waitの値を大きく取って間に合うように調整します。

準備

Windows環境の場合にはcurlを準備します。

バックアップ済みファームウェアがある場合

事前にflashメモリの内容をバックアップしておいた場合には、/dev/mtdblock/2 と/dev/mtdblock/3 のデータを結合してリカバリ用のファームウェアを生成します。
Windows環境ではcopy /b コマンドを使ってlinuxやmacであればcatコマンドで結合してください。
 copy /b mtdblock2.dd+mtdblock3.dd wzr900dhp_cfe.trx
 cat mtdblock2.dd mtdblock3.dd > wzr900dhp_cfe.trx

純正firmwareからの生成

注意点

純正アップデート用データからリカバリ用のfirmwareを生成できることがわかっているのは一部の機種のみです。
WZR-600DHP3
WZR-900DHP2
WZR-1166DHP
WZR-1750DHP
また、無線LAN用の暗号化firmwareは含まれないので、純正ファームウェアに復旧できたとしても無線LAN出力が出ない問題が発生する可能性があり、完全ではありません。

buffalo-encコマンドの準備

OpenWrt/LEDEのSDKやimage builderに含まれる、buffalo-encが必要です。
64bit linux環境を用意し、lede-sdk-17.01.4-bcm53xx_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64.tar.xzlede-imagebuilder-17.01.4-bcm53xx.Linux-x86_64.tar.xz をダウンロードして、buffalo-encコマンドを使えるようにします。
wget https://downloads.lede-project.org/releases/17.01.4/targets/bcm53xx/generic/lede-sdk-17.01.4-bcm53xx_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64.tar.xz
tar -Jxvf lede-sdk-17.01.4-bcm53xx_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64.tar.xz

純正ファームウェアの準備

メーカーサポートページから純正のアップグレード用ファームウェアをダウンロードし、展開しておきます。

加工

1)ddで先頭200byteをカット
 $ dd if=<buffalo_firm> of=temp.bin bs=1 skip=200
2)確認
 $ hexdump -C temp.bin | head で先頭がstart で始まっていることを確認
3)buffalo-encコマンドで加工
 $ buffalo-enc -d -i temp.bin -o temp2.bin
4)加工済みfirmから先頭46byteをカット
 $ dd if=temp2.bin of=wzr900dhp_cfe.trx bs=1 skip=46
5)確認
 $ hexdump -C wzr900dhp_cfe.trx | head で先頭がHDR0 で始まっていることを確認

CFEのwait_time設定

一度、ルータにLEDEをインストールし、nvramコマンドでbootloaderのCFE用のパラメータが読み書きできることを確認します。
以下のコマンドでboot時のwait_timeを設定します。
 # nvram set boot_wait=on
 # nvram set wait_time=30
 # nvram commit

インストール

リカバリ用のファームウェアを C:\temp\ 以下に置きます。
wzr900dhp_cfe.trx

PCのIPアドレスを 192.168.1.2/24 に設定します。

インストール実施
1)あらかじめ ping -t 192.168.1.1 を実行します。
2)別Windowで以下コマンドラインを準備(まだEnterしないでください)
 curl -F "name=@c:\temp\wzr900dhp_cfe.trx" http://192.168.1.1/f2.htm
 (f2.htm のフォーム内の name に指定したファイルの内容をPOSTメソッドで送信)
3)AOSSボタンを押しながら電源を入れます。
 正面のLED全点灯後 緑のPower LEDだけが点灯するまで押し続けます。
4)192.168.1.1 から TTL=100でping応答があったらすかさず別窓のcurl を enter
 成功すれば Upload completedの文字列が含まれる HTML が返ってきます。
 curl: (56) Recv failure: や curl: (7) Failed to connect to 192.168.1.1 port 80: は失敗です。
5)nvramの内容をreset
 OpenWrt/LEDEから純正の戻した場合にはnvramの内容をresetしないと起動できません。
 「30-30-30 reset」もしくは mini CFE Web Server 起動中に以下のようにしてCFE用のnvramパラメータを消去します。
 curl http://192.168.1.1/do.htm?cmd=nvram+erase
 ※reset後はboot_wait等の設定も初期化されます。
6)再起動後の再ファームウェアインストール
 電源OFF/ON後、メーカー純正ファームウェアで起動してきたら、メンテナンスページからもう一度ファームウェアをインストールし直します。

参考情報

最終更新:2018年10月08日 23:18