2018年1月に某氏より頂き、年を跨いでようやくサポートを追加することができました。
自分の知識不足でハードウェアの必要な構成情報を調べられず、長期間保留になっていましたが、別のアプローチにより構成情報を得て作業を行い、マージされました。まとめます。
仕様
以前投げ込んだNEC Aterm WG2600HPと同じ、IPQ8064搭載機です。WG2600HPと比べて非常に筐体が大きく、外部接続のアンテナ4本が非常に印象的。大型故にWG2600HPと比べて排熱周りは多少安心できるかもしれません。USB 3.0ポートは2つ搭載しています。
無線機能の使用は、法律の関係上非推奨です。
- SoC: Qualcomm IPQ8064 (384 - 1,400MHz, 2C2T)
- RAM: DDR3 512MB
- Flash:
SPI Flash 4MB
NAND 256MB - WAN/LAN: 1000Mbps x1 / 1000Mbps x4
- UART: 115200bps(J3, 並びはシルク印刷通り)
- USB: 3.0 Type-A x2
その他様々な詳細情報等は雑記ブログを参照。
OpenWrt化
Factoryファームを生成させることも可能でしたが、色々な事情により用意していません。BUFFALO機でおなじみの、AOSSボタンを押しながらブートする方法を使用します。
- TFTPサーバを用意
- WXR-2533DHPのinitramfsファームを
wxr2300dhp-initramfs.uImage
へリネームしたうえでTFTPディレクトリへ設置し、IPアドレス:192.168.11.10
でTFTPサーバを開始 - WXR-2533DHPをブート
- AOSSボタンを押しながら電源スイッチを押し、WXR-2533DHPを起動
- initramfsファームで起動
- WXR-2533DHPが起動中にWireless LEDが点滅したら、AOSSボタンから指を離す。WXR-2533DHPがTFTPサーバからinitramfsファームをダウンロードし、それを用いてブートを行う
- NAND FlashのOSイメージをバックアップ
- initramfsファームで起動した状態でメーカーファームのバックアップを行う(任意)
バックアップ無しでもOpenWrtをインストールすることは可能なものの、バックアップしておくとメーカーファームへの復元が容易
/proc/mtd
を参照してmtd0またはmtd1が"ubi"
または"rootfs_1"
であることを確認し、ddでmtd0またはmtd1を取り出す
例:dd if=/dev/mtd0 of=/tmp/mtd0.ubi
- sysupgrade
- sysupgradeファームをダウンロードし、sysupgradeを実行
- 完了
- sysupgrade後、FlashからOpenWrtが起動してくれば完了
メーカーファームへの復元
OpenWrt化の際バックアップしたファイルを用い、mtd1に対してubiformatを行う。
cat /proc/mtd
でmtd1が "rootfs_1" であることを確認し、
ubiformat -f mtd0.ubi /dev/mtd1
を行い再起動する。
備考
- WXR-2533DHP2は実機を確認しておらず、あくまでWXR-2533DHP用のサポート。
- サポート作業が遅延していたのは、SPIやNAND、GPIO等各種ピンの構成情報が不明であったことが理由。BUFFALOが公開しているWXR-2533DHPのGPLソースコード内で、WG2600HP等で構成情報が書き込まれていたCファイル内にデバイス固有と思われる情報が無く、構成情報が不明だった。
長らくその状態のまま仮設定のまま保留になっていたものの、他targetでのサポート作業の経験からレジスタを見ることを知識として得、Linux Kernel (mainline)のコードからGPIO関連のレジスタと思われるアドレスを探り、WXR-2533DHPにてメーカーファーム上で参照して恐らくそれと思われる構成情報を得て、それをもとにOpenWrtのコードを構成した。
電流値等を設定するため、不正な構成情報を使用した場合SoCや関連デバイスへの過負荷等で故障を招く恐れがある。 - WXR-2533DHPは4MBのSPI-NOR FlashをBootloader (U-Boot)やハードウェア情報の格納に、256MBのNAND FlashをOSイメージの格納に使用する。このうちNAND Flashは実際に使用されているのは前半128MBのみであり、また、そこにOSイメージを2つ持つ構成であるため、OSイメージ1つ辺りのサイズは64MB程度となる。
- NAND Flashに格納されるOSイメージは、UBIによってVolumeが分けられてそれぞれに Kernel, RootFS, RootFS Data が格納されている。このうちRootFSのVolumeには
"ubi_rootfs"
というvolume名が割り当てられていたが、この名前はOpenWrtでは直接使用することができない("rootfs"
なら直接扱える)。
しかしながら、起動時にU-Bootが"ubi_rootfs"
のチェックを行うため、どうしてもこの名前が必要であり、OpenWrtが直接扱える"rootfs"
に変更することができなかった。- サポート作業時、どうしてもOpenWrtでrootfsとして
"ubi_rootfs"
を使用することができず、ダミーのvolumeとして"ubi_rootfs"
を用意し、OpenWrtは"rootfs"
を使用するようにした。 - PRを出した際、"bootargsに
ubi.block
を含めることで指定したUBI volumeからblockデバイスを作成する" という指摘を受け、その通りに追加してrootfs=/dev/ubiblock0_1
を追加で指定したところ、正常に"ubi_rootfs"
をRootFSとして使用することができた。
- サポート作業時、どうしてもOpenWrtでrootfsとして
色々
記事の最初に書いた通り2018年からおよそ1年掛かった作業がようやく終わって、ほっとした。
WXR-2533DHPはU-BootやKernelにパスワードが設定されているなどは無いものの、正確なハードウェア情報が得られず苦戦した形になった。正確な情報が予め公開されているGPLソースコードから得られてすぐに組み上げられたものの、U-BootもKernelもガチガチで投入に苦戦したWG2600HPと比べてどっちもどっち、という感じ。
兎にも角にも、この機種でも非常に多くの知見が得られたので、結果としてはとても良かったのではないかなと。実機を提供して頂いた某氏には本当に感謝です。
ubiblockの件はもっと早く知りたかった...。