はじめに
Buffalo社のルータWXR-1900DHPを安く手に入れたので
この機器をOpenWrt化するまでのやり方を備忘録を兼ねて記載します。
最新ファームウェア(Ver2.51)で、なおかつ殻割りせずに導入に成功していますので記事化します。

※アンテナなしのせいかバッテリー付きで330円でした
背景
OpenWrtの公式サイトには専用ページがあり、TRXファイルが置いてありますが、これのインストールをどう実施するかが問題になります。
DD-WRT OpenWrt 適材適所で両方使いたい人向け @ ウィキにも専用ページがあり、すでに色々試した方のサイトがあるのですが、ここで紹介されている方法は基本的にデバッグモード1が必要です。
wxr1900dhpにOPENWRTを入れてみたときの失敗例と成功例 (魚拓)
しかし、私が持っている機器はすでに最新ファームウェア(2024年5月現在だとver2.51)になっており、このバックドアは塞がれています。2
色々調査したところinitramfs imageを公開してくれている方がいました。
これを使ってnvramに書き込みすることでOpenWrt化に成功したので、手順をここで公開します。
手順1 各種ファイルのダウンロードと配置
手順2 TFTPソフトのインストールと動作確認
手順3 initramfs image起動とバックアップ
手順4 ファームウェアの書き込み
必要なもの
- 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ファイアウォールの有効化と無効化
よりプライベートネットワークとパブリックネットワークの両方のファイアウォールを無効化します。
次にIPアドレス設定変更を行います。
コントロールパネル
>ネットワークとインターネット
>ネットワークと共有センター
>アダプターの設定の変更
>イーサネット
>プロパティ
から
- IPアドレスを
192.168.11.2
- サブネットマスクを
255.255.255.0
- デフォルトゲートウェイを
192.168.11.1
に設定します。(DNSサーバの設定を画像では入れていますが、なくても問題なし)
なお、このイーサネットのプロパティ
はタスクバーのインターネットアクセス
のアイコンからアダプターのオプションを変更する
で飛ぶこともできます。

TFTPソフトの設定
右クリックより管理者として実行
して、各種設定をしていきます。
GLOBALタブはTFTP Server
だけチェックがついていればOKです。
TFTPタブは画像のように設定して下さい。
-
Base Directory
をfirmware.ram
を置いたディレクトリに設定すること -
Bind TFTP to this address
を192.168.11.2
に設定すること

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

またServer interfaces
も192.168.11.2
に変更します。
なお、この時に再起動するとエラー出ることがありますが、無視でOKです。

TFTPサーバの動作確認
TFTPサーバが問題なく起動しているか、動作確認する手順です。
TFTPサーバをよく使っている方、動作確認は不要な方は飛ばしてもらって構いませんが、慣れてない人はここで問題なくTFTPサーバが起動できているか確認した方が良いと思います。
コントロールパネル
>プログラムと機能
>Windowsの機能の有効化または無効化
よりTFTPクライアント
にチェックをつけて下さい。
これによりTFTPのクライアント機能が有効化されます。
TFTPD64のソフトはTFTPサーバ機能なので別です
このソフトはTFTPクライアント機能も付いていますが、ここでは使いません
次にIPアドレスの設定変更を実施します。
Server interfaces
とBind TFTP to this address
を両方127.0.0.1
に変更します。
コマンドプロンプトよりtftp 127.0.0.1 GET firmware.ram
を実行し、以下の画像のようにアクセスログがあること、正常にダウンロードできることを確認します。
TFTPサーバが問題なく動いているようであれば、Server interfaces
とBind TFTP to this address
を両方192.168.11.2
に変更しておきます。
initramfs image起動とバックアップ
イメージからの起動
今回実施するWXR-1900DHPのインストール方法は、Wikiでの「外部サーバから受信する方法」になります。
PCとLAN1をLANケーブルで繋いだあと、AOSSボタンを押しながら電源ONするだけで、TFTPクライアントが起動し、ファームウェアを取得しにきます。
画像のようにTFTPサーバにアクセスがあれば成功です。
失敗する場合は設定を見直しましょう。
無事にTFTPサーバにアクセスがあった場合は、IPアドレスを192.168.1.2
に変更します。

OpenWrt側は192.168.1.1
になっているはずなので、ブラウザでhttp://192.168.1.1
にログインします。
コマンドプロンプトよりssh root@192.168.1.1
でもログインできるはずです。
バックアップの取得
起動直後のパーティションは以下のような感じかと思います。
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で簡単にできます。
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機種で調査しましたが、failsafeへは書き込みしなくても起動はするようです。公式firmwareではUpdateに失敗した時にこの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ファイルを指定しても普通のファームが上がってきてしまいます。これはうまくいかなかったということをここに書き残しておきます。
(参考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時のランプを見ていると以下の順番でランプが点きます。
- 4つのランプが全て点灯(一瞬)
- POWERランプのみ点灯(10秒程度)
- POWERランプのゆっくり点滅(3秒)
- POWERランプの早め点滅(10秒程度)
- POWERランプの点灯(=OpenWrt起動)
3番のPOWERランプゆっくり点灯時に物理ボタン4を押すことでFailsafe Modeに入れるようなのですが、何度やってもダメでした。
有識者の方、コメントでご教授いただけると幸いです。
(参考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により復旧させました。)
できた人がいたら誰か記事化して下さい。
終わりに
330円でLinuxサーバが手に入ると思ったらかなりお買い得かと思います。
皆さんも良いOpenWrtハックを。
そのほかの参考サイト
記事内でリンクしていないけど参考にしたサイトをここに記載しておきます。
WXR-1900DHPの公式サイト
5chのWXR-1900DHPの記事1 ※ここでinitramfs imageを見つけました
5chのWXR-1900DHPの記事2 ※同じように OpenWrt化できなくて困っていた人のコメあり
DD-WRTまとめwiki