4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WXR-1900DHPのOpenWrtのインストール

Last updated at Posted at 2024-05-27

はじめに

Buffalo社のルータWXR-1900DHPを安く手に入れたので
この機器をOpenWrt化するまでのやり方を備忘録を兼ねて記載します。

2024年5月の最新ファームウェア(Ver2.51)で、なおかつ殻割りせずに導入に成功していますので記事化します。

※アンテナなしのせいかACアダプター付きで330円でした

背景

OpenWrtの公式サイトには専用ページがあり、TRXファイルが置いてありますが、これのインストールをどう実施するかが問題になります。

スクリーンショット 2024-05-27 20.34.38.png

DD-WRT OpenWrt 適材適所で両方使いたい人向け @ ウィキにも専用ページがあり、すでに色々試した方のサイトがあるのですが、ここで紹介されている方法は基本的にデバッグモード1が必要です。

wxr1900dhpにOPENWRTを入れてみたときの失敗例と成功例

しかし、私が持っている機器はすでに最新ファームウェア(2024年5月現在だとver2.51)になっており、このバックドアは塞がれています。2

色々調査したところinitramfs imageを公開してくれている方がいました。
これを使ってnvramに書き込みすることでOpenWrt化に成功したので、手順をここで公開します。

手順1 各種ファイルのダウンロードと配置
手順2 TFTPソフトのインストールと動作確認
手順3 initramfs image起動とバックアップ
手順4 ファームウェアの書き込み

この機種はBroadcomのWiFiチップを使用しており、OpenWrt化すると無線機能が使えなくなる可能性があります。
詳細は公式の注意を参照ください。

必要なもの

  • PC(Windows)
  • WXR-1900DHP(ファームウェアVer2.51)
  • LANケーブル

手順1 各種ファイルのダウンロードと配置

ファイルダウンロード

  • initramfs image
    ここからダウンロード3
    ※作成してくださった有志の方、ありがとうございました
  • TFTPソフト
    ※今回はTFTP64を使いました
  • trxファイル
    OpenWrt公式サイトより「openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx」をダウンロード

ファイルの配置

WXR-19000DHPのinitramfs image(openwrt-bcm53xx-generic-buffalo_wxr-1900dhp-initramfs-kernel.bin)をfirmware.ramに変更し、TFTPのトップディレクトリに配置します。
今回はC:\ftpfilesというディレクトリを作成し、そこに配置しました。

TFTPソフトのインストールと動作確認

TFTPソフトのインストール

インストーラに従ってTFTP64をインストールして下さい。
インストールの詳細はここ見てもらえればと思います。

Windowsの諸設定

Windowsファイアウォールを無効化します。これをしないとTFTPの通信がWindowsファイアウォールで止められることがあるためです。

もしセキュリティソフトを入れている方は、その無効化も実施して下さい

コントロールパネルシステムとセキュリティWindowsDefenderファイアウォールWindows Defenderファイアウォールの有効化と無効化
よりプライベートネットワークとパブリックネットワークの両方のファイアウォールを無効化します。

windefend.PNG

次にIPアドレス設定変更を行います。

コントロールパネルネットワークとインターネットネットワークと共有センターアダプターの設定の変更イーサネットプロパティから

  • IPアドレスを192.168.11.2
  • サブネットマスクを255.255.255.0
  • デフォルトゲートウェイを192.168.11.1
    に設定します。(DNSサーバの設定を画像では入れていますが、なくても問題なし)

ipaddress.PNG

なお、このイーサネットのプロパティはタスクバーのインターネットアクセスのアイコンからアダプターのオプションを変更するで飛ぶこともできます。

TFTPソフトの設定

右クリックより管理者として実行して、各種設定をしていきます。

GLOBALタブはTFTP ServerだけチェックがついていればOKです。

TFTPタブは画像のように設定して下さい。

  • Base Directoryfirmware.ramを置いたディレクトリに設定すること
  • Bind TFTP to this address192.168.11.2に設定すること

設定後はBrowseボタンよりfirmware.ramがちゃんと見えるか確認しましょう。

またServer interfaces192.168.11.2に変更します。

なお、この時に再起動するとエラー出ることがありますが、無視でOKです。

TFTPサーバの動作確認

TFTPサーバが問題なく起動しているか、動作確認する手順です。
TFTPサーバをよく使っている方、動作確認は不要な方は飛ばしてもらって構いませんが、慣れてない人はここで問題なくTFTPサーバが起動できているか確認した方が良いと思います。

コントロールパネルプログラムと機能Windowsの機能の有効化または無効化
よりTFTPクライアントにチェックをつけて下さい。

tftp-enable.PNG

これによりTFTPのクライアント機能が有効化されます。

TFTPD64のソフトはTFTPサーバ機能なので別です
このソフトはTFTPクライアント機能も付いていますが、ここでは使いません

次にIPアドレスの設定変更を実施します。
Server interfacesBind TFTP to this addressを両方127.0.0.1に変更します。

コマンドプロンプトよりtftp 127.0.0.1 GET firmware.ramを実行し、以下の画像のようにアクセスログがあること、正常にダウンロードできることを確認します。

tftp-test.PNG

TFTPサーバが問題なく動いているようであれば、Server interfacesBind TFTP to this addressを両方192.168.11.2に変更しておきます。

initramfs image起動とバックアップ

イメージからの起動

今回実施するWXR-1900DHPのインストール方法は、Wikiでの「外部サーバから受信する方法」になります。
PCとLAN1をLANケーブルで繋いだあと、AOSSボタンを押しながら電源ONするだけで、TFTPクライアントが起動し、ファームウェアを取得しにきます。

画像のようにTFTPサーバにアクセスがあれば成功です。
失敗する場合は設定を見直しましょう。

access.PNG

無事にTFTPサーバにアクセスがあった場合は、IPアドレスを192.168.1.2に変更します。

OpenWrt側は192.168.1.1になっているはずなので、ブラウザでhttp://192.168.1.1にログインします。
コマンドプロンプトよりssh root@192.168.1.1でもログインできるはずです。

login.PNG

バックアップの取得

起動直後のパーティションは以下のような感じかと思います。

root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 03000000 00020000 "firmware"
mtd1: 001daba4 00020000 "linux"
mtd2: 02e25440 00020000 "rootfs"
mtd3: 01240000 00020000 "rootfs_data"
mtd4: 05000000 00020000 "failsafe"
mtd5: 00070000 00010000 "boot"
mtd6: 00010000 00010000 "nvram"
root@OpenWrt:~#

書き込みの前にバックアップを取得しましょう。
全パーティションを取得することをおすすめします。
取得はGUIで簡単にできます。

スクリーンショット 2024-05-27 23.33.35.png

ddコマンドを使ってバックアップするでもOKです。

ddコマンドで/tmp配下にファイルを作成し、
コマンドプロンプトでscpコマンドよりコピーするだけです。

dd if=/dev/mtdblock1 of=/tmp/backup1.rom
scp root@192.168.1.1:/tmp/backup1.rom .

ファームウェアの書き込み

ここからが本番です。

scpコマンドよりtrxファイルをルータに送ります。

C:\Users\Public\Downloads>scp openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx root@192.168.1.1:/tmp
openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx                                                           100% 7168KB  14.7MB/s   00:00

C:\Users\Public\Downloads>

ddコマンドを使って書き込みをします。
書き込み先はfirmwareであるmtd0とfailsafeであるmtd4です。

追記
その後に別のBuffalo機種(WZR-S600DHP)で同様のコマンドを実施しインストールを試しましたが、failsafeへは書き込みしなくても起動はするようです。Buffalo公式のfirmwareではアップデートに失敗した時にこのfailsafeの領域からbootするようですが、OpenWrtでは使わないと思われます。

mtd eraseはしなくても良いかもしれませんが、一応実施しておきました。


C:\Users\Public\Downloads>ssh root@192.168.1.1

BusyBox v1.33.2 (2022-03-26 20:26:07 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 21.02-SNAPSHOT, r0+16541-5cf00adf21
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:~#
root@OpenWrt:~# mtd erase /dev/mtd0
Unlocking /dev/mtd0 ...
Erasing /dev/mtd0 ...
root@OpenWrt:~# mtd erase /dev/mtd4
Unlocking /dev/mtd4 ...
Erasing /dev/mtd4 ...
root@OpenWrt:~# dd if=/tmp/openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx of=/dev/mtdblock0
14336+0 records in
14336+0 records out
root@OpenWrt:~# dd if=/tmp/openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx of=/dev/mtdblock4
14336+0 records in
14336+0 records out
root@OpenWrt:~# reboot
root@OpenWrt:~# Connection to 192.168.1.1 closed by remote host.
Connection to 192.168.1.1 closed.

C:\Users\Public\Downloads>

以下にmtdコマンドのヘルプを置いておきます。
どういうコマンドなのか不安な人は確認して下さい。

mtdコマンドのヘルプ(折りたたみ)
root@OpenWrt:~# mtd
Usage: mtd [<options> ...] <command> [<arguments> ...] <device>[:<device>...]

The device is in the format of mtdX (eg: mtd4) or its label.
mtd recognizes these commands:
        unlock                  unlock the device
        refresh                 refresh mtd partition
        erase                   erase all data on device
        verify <imagefile>|-    verify <imagefile> (use - for stdin) to device
        write <imagefile>|-     write <imagefile> (use - for stdin) to device
        jffs2write <file>       append <file> to the jffs2 partition on the device
        fixtrx                  fix the checksum in a trx header on first boot
        fixseama                fix the checksum in a seama header on first boot
Following options are available:
        -q                      quiet mode (once: no [w] on writing,
                                           twice: no status messages)
        -n                      write without first erasing the blocks
        -r                      reboot after successful command
        -f                      force write without trx checks
        -e <device>             erase <device> before executing the command
        -d <name>               directory for jffs2write, defaults to "tmp"
        -j <name>               integrate <file> into jffs2 data when writing an image
        -s <number>             skip the first n bytes when appending data to the jffs2 partiton, defaults to "0"
        -p <number>             write beginning at partition offset
        -l <length>             the length of data that we want to dump
        -o offset               offset of the image header in the partition(for fixtrx)
        -c datasize             amount of data to be used for checksum calculation (for fixtrx / fixseama / fixwrg / fixwrgg)

Example: To write linux.trx to mtd4 labeled as linux and reboot afterwards
         mtd -r write linux.trx linux

root@OpenWrt:~#

再起動してもOpenWrtが起動するようになればOpenWrt化は完了です。

ちなみに、GUIからの更新もあるのですが、trxファイルを指定しても普通のファームが上がってきてしまいます。これはうまくいかなかったということをここに書き残しておきます。

flash.PNG

(参考1) 初期化の方法

設定をミスってログインできなくなった場合のリカバリ方法です。
やり方としてはinitramfs imageで起動し、ファームウェアを再度mtdblock0に書き込むだけで初期化できます。

dd if=/tmp/openwrt-23.05.0-bcm53xx-generic-buffalo_wxr-1900dhp-squashfs.trx of=/dev/mtdblock0

ちなみに、OpenWrtの公式の機能としてFailsafe Modeが存在し、これを使えば初期化をせずとも任意の設定を変えることができます。
しかし、こちらで試したところ、うまくFailsafe Modeに入ることができませんでした。

起動時の電源ON時のランプを見ていると以下の順番でランプが点きます。

  1. 4つのランプが全て点灯(一瞬)
  2. POWERランプのみ点灯(10秒程度)
  3. POWERランプのゆっくり点滅(3秒)
  4. POWERランプの早め点滅(10秒程度)
  5. POWERランプの点灯(=OpenWrt起動)

3番のPOWERランプゆっくり点灯時に物理ボタン4を押すことでFailsafe Modeに入れるようなのですが、何度やってもダメでした。
有識者の方、コメントでご教授いただけると幸いです。

2025/5追記
項番2と3の間のPOWERランプが消えた時にAOSSボタンを連打することで、Failsafe modeに入れるとコメントでご連絡いただきました。筆者の筐体は何度やってもだめだったので、物理的に壊れていたか、どこかの設定(nvramあたり?)をいじりすぎておかしくなっていた可能性があります。

(参考2) nvramコマンドについて

nvramコマンドによりnvramの設定を書き換えることができます。

  • 待受時間を変更(nvram set wait_time=30)
  • 待ち受けるIPアドレスを変更(nvram set lan_ipaddr=192.168.X.X)
    などなど。

あまり設定変更をし過ぎるとうまくTFTPクライアントが起動しなくなることがあります。TFTPD64にアクセスログが3回出るのですが、3回とも正常に読み込まずにTFTP通信が失敗するような形です。

そういう場合は同じようにddコマンドでバックアップしたファイルを書き込むと元に戻せます。
dd if=/tmp/backup6.rom of=/dev/mtdblock6

(参考3) 公式ファームウェアへの戻し方について

書き込み前にバックアップを取っているので、mtdコマンドを使って元通りに書き込めば公式ファームウェアに戻ると思います。
ただ、文鎮化するのが怖いのであまり試していません。
(少なくともmtd0に公式ファームウェアをそのまま書き込むだけでは、うまく起動しませんでした。この時もinitramfs imageにより復旧させました。)
できた人がいたら誰か記事化して下さい。

(2025/5 追記) シリアル接続について

この記事を書いたあと、色々いじっていたらbrickしたので殻割りしてシリアル接続を試しました。

殻割りはマイナスドライバー等を使ってこじ開けました。破損無く開けるのは不可能だと思います。

開けると以下の感じです。

IMG_5714.JPG

IMG_5715.JPG

家にラズパイ3Bがあったので、シリアル接続はそちらを利用し接続しています。(ラズパイの他にはジャンパ線も必要です)
ラズパイがない方は適当なUSB-シリアルケーブルを購入すれば良いと思います。

ラズパイでのシリアル接続方法ですが、簡単に書くと
・ラズパイのシリアルポートの有効化
・ボーレートなどの設定変更
・ピンの接続
になります。

WXR-1900DHP ラズパイ3B
GND GND(6番PIN)
RX TX(8番PIN)
TX RX(10番PIN)

接続方法の詳細はRaspberry Piのシリアルポート設定(UART)を理解するをご確認ください。リンク先ではWindowsとラズパイを繋いでいますが、Windows側をWXR-1900DHPにするだけです。

実際に接続した時のログは以下です。

root@rasberrypi ~ % cat /dev/serial0

Digital core power voltage set to 1.0V
c_ddr_init: sdram_config=0x014b sdram_ncdl=0x00000320 sdram_refresh=0x0000081c


BUFFALO CFE Version 1.00  [DDRCLK:400]
Decompressing...Decompressing...done
Found a ST compatible (Marconix) serial flash with 16 64KB blocks; total size 1MB
et0: Broadcom BCM47XX 10/100/1000 Mbps Ethernet Controller 6.37.14.62 (r437318)
================================================================================
tmpr  current 36 (2b1)
tmpr  normal_thresh=98   bootable_thresh=115
current 36 < thresh 116,  booting FW...
================================================================================

DDR clock change and Calibrate... [400->800]
Digital core power voltage set to 1.0V
c_ddr_init: sdram_config=0x014b sdram_ncdl=0x00000320 sdram_refresh=0x0000081c

SHMOO VER 1.13

(以降略)

これを使えばTFTPのログも見えるため、トラブル時の原因調査が捗るかと思います。

(参考)CFEで使えるコマンド群(折りたたみ)
CFE>
CFE> help
Available commands:

watchdog            Set watchdog value.
nvram               NVRAM utility.
reboot              Reboot.
test ether          Do an ethernet test, reading packets from the net
phyreg              Do an phy register test, read/write register
mii                 Do an mii register test, read/write register
et                  Broadcom Ethernet utility.
clearmem            Clear memory.
memtest             Test memory.
f                   Fill contents of memory.
e                   Modify contents of memory.
d                   Dump memory.
u                   Disassemble instructions.
flash               Update a flash memory device
batch               Load a batch file into memory and execute it
go                  Verify and boot OS image.
boot                Load an executable file into memory and execute it
load                Load an executable file into memory without executing it
save                Save a region of memory to a remote file via TFTP
ping                Ping a remote IP host.
arp                 Display or modify the ARP Table
ifconfig            Configure the Ethernet interface
show clocks         Show current values of the clocks.
show flash          Display information about a flash device.
show heap           Display information about CFE's heap
show memory         Display the system physical memory map.
show devices        Display information about the installed devices.
help                Obtain help for CFE commands

For more information about a command, enter 'help command-name'
*** command status = 0
CFE>

なお、写真を貼ったようにこの機種は1Gbit(=128MB)のNANDフラッシュメモリ(MX30LF1G08AA-TI)を使っているため、誤操作でbootloaderごと破壊してしまった時の復旧はかなり絶望的かと思います。もしできた方がいたら記事化してください。

(参考) インストール方法概説(ウィキ)の「基板上のflashメモリに直接書き込む」部分

終わりに

330円でLinuxサーバが手に入ると思ったらかなりお買い得かと思います。
皆さんも良いOpenWrtハックを。

そのほかの参考サイト

記事内でリンクしていないけど参考にしたサイトをここに記載しておきます。

5chのWXR-1900DHPの記事1 ※ここでinitramfs imageを見つけました
5chのWXR-1900DHPの記事2 ※同じように OpenWrt化できなくて困っていた人のコメあり
DD-WRTまとめwiki
WXR-1900DHP2 への OpenWrt / DD-WRT のインストールメモ ※後継機種のインストール手順で、こちらも十分参考になるかと思います

  1. ユーザ名:bufpy、パスワード:otdpopypasswordでログインするモード

  2. このバックドアはVer2.37で塞がれたようです

  3. 中にはWXR-1900DHPの他にもWZR-600DHP2、WZR-900DHP、WZR-1750DHPのイメージも入っていました

  4. WXR-1900DHPにはAOSSボタン、筐体下部のリセットボタン、USBイジェクトボタンの3つの物理ボタンがあるのですが、どれを押してもダメでした

4
5
16

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?