大破ログ

日々大破、それと側転少々。PC関連その他、気になったことなどをつらつらと。

BUFFALO WXR-2533DHP

WXR-2533DHP内部

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として使用することができた。

色々

記事の最初に書いた通り2018年からおよそ1年掛かった作業がようやく終わって、ほっとした。
WXR-2533DHPはU-BootやKernelにパスワードが設定されているなどは無いものの、正確なハードウェア情報が得られず苦戦した形になった。正確な情報が予め公開されているGPLソースコードから得られてすぐに組み上げられたものの、U-BootもKernelもガチガチで投入に苦戦したWG2600HPと比べてどっちもどっち、という感じ。
兎にも角にも、この機種でも非常に多くの知見が得られたので、結果としてはとても良かったのではないかなと。実機を提供して頂いた某氏には本当に感謝です。
ubiblockの件はもっと早く知りたかった...。