大破ログ

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

BUFFALO WSR-2533DHP2

WSR-2533DHP2内部

個人的に初となるMT7622 (ARM)搭載機。もう既に記憶が曖昧であるものの、masterが確かKernel 4.14であった頃某氏より提供頂いてずっと作業を続けていました。
途中から同じく某氏より実機の提供を受けたOpenWrtのチームメンバーであるHauke氏が加わり、何度かやり取りしながら今回ようやくサポート入りとなりました。まとめていきます。

仕様

SoCにはaarch64であるMT7622(mips(el)のMT7621ではない)を搭載し、無線は2.4GHz帯をSoCの無線機能を、5GHz帯はMT7615を搭載してカバーしています。また、SoCとSwitchの間は2.5Gbpsで接続されており、帯域に比較的余裕があります。
法律の関係上、無線機能の使用は非推奨です

  • SoC: MT7622B
  • RAM: DDR3 256MiB
  • Flash: NAND 128MiB
  • WAN/LAN: 1000Mbps/1000Mbps x4 (RTL8367S)
  • UART: J4, 115200bps(RJ45側から3.3V, GND, TX, RX)

その他詳細については、雑記を参照。

OpenWrt化

今回Hauke氏がfactoryイメージを仕立てて下さったので、簡単に投入できます。

WSR-2533DHP2を起動
電源ケーブルを繋ぎ、通常通りWSR-2533DHP2を起動
WebUIにアクセス
WSR-2533DHP2の設定用WebUIを開き、ファームウェア更新ページへ移動
ファーム更新
WSR-2533DHP2のfactoryイメージ("squashfs-factory.bin")を選択し、アップデートを実行
この際、"factory-uboot.bin" はU-Boot用でありWebUI用ではないので選択しないこと
完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動してくる

備考

WSR-2533DHP3は非サポート
WSR-2533DHP3はスイッチその他でDHP2とはいくつかの差異があることが予想され、その関係上DHP2用のファームウェアは使用不可
21.02リリースには入らない
マージ時点では既にOpenWrt 21.02リリース用branchが切られた後であったため、当該リリースには間に合わずWSR-2533DHP2のサポートは入らない
"factory-uboot.bin" イメージはU-Bootとその他用
WebUI用の "factory.bin" ともう一つ "factory-uboot.bin" が生成されるようになっており、後者はU-Bootからの書き込みのほか、何らかの理由によりKernelとRootFSを一括で書き込む必要がある場合に使用するもの
例:
  • 将来的にKernelサイズが現在の4MiBから更に大きいサイズに変更された場合
  • Flash内にメーカーファームウェアが存在している状態でinitramfsイメージでブートした場合
ただし、sysupgrade時に使用する場合は仕様上設定を引き継ぐことができない
Flash内のOSイメージは2組存在
Flash内部にはOSイメージ領域が2組存在しており、その関係上OpenWrtでKernel + RootFS + ユーザー領域で使用できる合計サイズは58MiB(= 0x3A00000)ほど

作業時の色々

  • とにかくイーサネットスイッチ部分が長らく問題になっていた。
    WSR-2533DHP2はRTL8367Sを搭載するが、つい最近までOpenWrtではこのスイッチのサポートが存在せず。別のRTL8367S搭載機種のPRでハードウェア的に近いRTL8367(R)B用ドライバである既存のrtl8367bドライバを改変して部分的にRTL3867Sサポートを追加しようとするものもあったが、どうにも進展が無いまま時間だけが過ぎていた。
    結局最近になってELECOMの市販されていない機種のサポートが入った際、同時にMediaTekから出たらしいRTL8367Sドライバがmediatek targetに追加され、ひとまずそれを使用できるようになったのでWSR-2533DHP2のサポートでもそれを利用した。
    ただ、決め打ちの箇所がだいぶ多く、その上OpenWrtでは使用されないコードが大量にあるあまりに巨大なドライバであるので、正直印象としてはだいぶ微妙。
  • 上記のスイッチ部分に次いで問題になっていたのがOpenWrtでFlashに書き込むファームウェアのフォーマットだった。
    NAND搭載機であることからRootFSにはUBIを使用したいところであったものの、単純に組み合わせようとするとエラーも吐かずブートが止まる問題を起こした。これについてはHauke氏がbcm53xxで使用されている方法を活用して解決してくださり、問題無くブートできるようになった。
    また、WSR-2533DHP2では "trx" というフォーマットのMagicNumberに非標準のものを用いる必要があり、OpenWrtでブート時にこのフォーマットからKernelとRootFSを分離するドライバでは標準のMagicNumber以外を認識できないため、代わりにLinux Kernel内の parser_trx に非標準MagicNumberのサポートを追加したうえで利用することとなった。
    この非標準MagicNumberのサポートはWCR-1166DSのfactoryイメージがブートできない問題の解決に必要となるので、今後の状況を見つつ可能になったらその問題を修正する。
  • 上記で少し触れたとおり、WSR-2533DHP2のサポートは部分的に将来的なKernelサイズの増加に備えたものにした。今現在のところ4MiBで問題はないものの、今後Kernelバージョンが上がっていくにつれて増加していくため、もし必要に迫られたときに大量の変更が必要になるのを避けたかったのと、それの対処についてある程度方向性を示したかった。

色々

今回、WSR-2533DHP2のサポート本体は自分の割合が多いものの、動作に必要となる周辺パッケージの改変やアイデア、コードの修正や改善、その他様々な点でHauke氏にご協力頂きました。また、最後こちらはNCP-HG100に掛かりっきりになってしまっていたのもあり、Hauke氏によってMLへのpatch投げ込みとコメントを受けての修正、マージまでやって頂き、本当に感謝です。
1年以上を要したものの、ようやくマージとなり肩の荷が下りた。aarch64としてはMT7622搭載機はハイエンドよりはミドルレンジ寄りであるほか、中古価格も最近だいぶ落ちてきており入手性としては良さそう。
現在同じくMT7622を搭載するWSR-3200AX4Sのサポート作業も進行中です。WSR-2533DHP3は今のところ作業予定は全くありません。