NetBSD系Aterm(WR8750N, WR9500N, WG600HP等)でのOpenWrtについて

表題に挙げたようなNetBSD系のAterm機については、現在OpenWrt公式では一切サポートされていません。その為、OpenWrt公式のダウンロードサイトを探しても、対応するファームウェアは存在しません。それらの機種のおおよそのサポート作業は終了していますが、完全な私的サポートとして扱っており、今後OpenWrtの公式リポジトリでPRをオープンしたり、パッチを送るなどする予定は全くありません。
これらの機種は非常に特殊な点が多く、OpenWrtを導入するには失敗すると文鎮化を招きかねない操作を多数要します。その為、ハードウェア構成や、シリアルコンソールやmtdの扱い方、ブートローダについての知識等が十分でない方には、OpenWrtの導入は全くお勧めできません。
また、既にこれらの機種に対する私自身のモチベーションは低下しており、今後これらの機種へのOpenWrt導入についての体系的な記事を書く予定はありません。OpenWrtの導入に必要な操作などは既にこのメインのブログと雑記ブログ、一部は私のTwitterアカウントのつぶやきに散在しており、前提知識と併せ、それらを参照することで十分OpenWrtの導入を為せるものと考えています。
裏返して言えば、その前提知識を持ち、情報の収集を行うなど自分自身である程度こなせる場合のみ行ってほしいということでもあります。

ELECOM WRC-X3200GST3

サポート投げ込みではWSR-2533DHP2に続いて2機種目となるMT7622 (ARM)搭載機。去年4月頃に某氏より提供頂いてサポート作業を始め、1年以上経ちようやくマージされました。
まとめていきます。

仕様

中心的なハードウェア構成自体はWSR-2533DHP2と似通っており、SoCにはaarch64のMT7622Bを(mips(el)のMT7621ではない)、無線部についてはWi-Fi 6 (11ax)対応である為MT7915を搭載しています。
法律の関係上、無線機能の使用は非推奨です

  • SoC: MT7622B
  • RAM: DDR3 512MiB
  • Flash: SPI-NAND 128MiB
  • WAN/LAN: 1000Mbps/1000Mbps x4 (MT7531)
  • UART: J19, 115200bps(DCジャック側から3.3V, GND, TX, RX)

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

OpenWrt化

この機種においてもramips targetで既にサポートされているWRC-*GS/GSV/GSTシリーズと同様のファームウェア形式である為、factoryイメージを作ることができ、容易に導入することが可能です。

WRC-X3200GST3を起動
電源ケーブルを繋ぎ、通常通りWRC-X3200GST3を起動
WebUIにアクセス
WRC-X3200GST3の設定用WebUIを開き、ファームウェア更新ページへ移動
ファーム更新
WRC-X3200GST3のfactoryイメージを選択し、アップデートを実行
完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動してくる

備考

この機種においても特段の癖は無し。

  • mediatek targetに既存で、なおかつ海外においてはMT7622搭載機として人気があるらしいE8450と異なり、非UBI版とUBI版でサポートを分けずにUBI版の1つのみとした。また、UBI版ではあるもののブートローダ (U-Boot)置き換えを前提とせず、メーカー出荷時のブートローダで使用することを前提としたサポート。
    理由としてはブートローダを置き換えたくないという一点が非常に大きく、もし置き換えた場合は、リリース版ファームウェアをWebUIから投入するテストが必要な際などにわざわざブートローダ等大規模な書き換え作業が必要となり、作業を誤って文鎮化させるリスクが高くなる。
    その他、一つの機種に対するサポートが複数あるとユーザー側を混乱させるかもしれないという理由もあるにはある。
  • メーカーファームウェアに書き戻す際は、公式からダウンロードしたものからヘッダを除去した上で6MiB丁度と残りに分割の上、それぞれkernelパーティションとubiパーティションに書き込む。
  • Flashは上記の通り128MiBであるものの、NAND特有のbadblock取り扱いに必要な領域や、その他の情報が保管される領域などである程度の容量が取られており、最終的にOpenWrtにおいて自由に使用できる容量はさほど大きくは無い。
  • OpenWrt 22.03用ブランチが切られた後のマージであった為、当該リリースには含まれず、次のメジャーリリース以降からサポートされる見込み。

作業時の色々

  • この機種においては、以前サポートをOpenWrtメンバーのhauke氏と共に投げ込んだWSR-2533DHP2のRTL8367Sと異なり、サポート済みであるMT7531を搭載している為、特に難なくネットワーク周りを動作させ作業を進めることができた。
  • 前述の通りramips targetで既にサポートされているWRC-*GS/GSV/GSTシリーズと同様のファームウェア形式を採っている為、factoryイメージ生成用コードを流用でき、その辺りは容易に仕立てることができた。
  • この機種においてはSPI-NORではなくSPI-NANDをFlashとして搭載している為badblockの発生を考慮する必要があり、PRを投げた後もしばらくはその辺りの対応で指摘をいくつか受けたり、修正が必要になるなどした。

色々

今回はおおよそのサポート自体はそれほど時間を要さず終えたものの、細かな調整や修正等によってマージされるまでにそれなりの時間を要した。特に、OpenWrt内におけるドライバの仕様変更に伴って2回ほど書き換えが必要になった個所もあった。
MT7622については、今回この機種を提供頂いた某氏から、WSR-2533DHP2におけるWireguard等の使用などでだいぶ優秀な実績を聞いており、その選択肢に今回加えられたのでその時々の中古価格などから選ぶと良いと思われる。あと

Panasonic Switch-M8eG PN28080K

恐らくOpenWrt全体で見ても初となると思われるPanasonic機。
自分の中ではAML2-17GPから始まったスイッチングハブ向けRealtek SoCにおけるOpenWrtの利用について、他に該当するデバイスが無いかあちらこちらをひっくり返した際に見つけ、強く興味を惹かれた機種です。
マージされたものの、色々あった関係で記事を後回しにしていたら忘れかけていました。
まとめていきます。

仕様

これまでマージされたAML2-17GP、BSH-G24MBよりも少ない8ポート(+SFP 1ポート)の機種です。それ故にSoCも前述の2機種と異なるRTL8380Mを搭載。

  • SoC: RTL8380M (500MHz)
  • RAM: DDR3 128MiB
  • Flash: SPI-NOR 32MiB
  • Ethernet: TP → 1000Mbps x8, SFP → 1000Mbps x1
  • RS-232C: 9600bps(RJ45, 所謂Ciscoケーブル互換)

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

OpenWrt化

だいぶ複雑で長い手順を執る必要がある為、ここには掲載しません。コミット内に記載されている手順を参照してください。
realtek: add support for Panasonic Switch-M8eG PN28080K · openwrt/openwrt@e83ab24

備考

  • Switch-M8eGには旧モデルである “PN28080” が存在するが、そちらはPN28080Kと異なりBroadcomベースのハードウェアであり、今回のサポートと互換は無く、今後OpenWrtにおいてサポートされることも無い。
    PN28080は筐体フロント部分が本体と同色の緑で塗装されており、一方でPN28080Kはフロント部分のみ黒色に塗装されているため、そこで見分けることが可能。
  • フロント正面左側にある “LED DISPLAY” ボタンは、特段の機能を割り当てていない。その為、押しても再起動や設定の初期化は行えない。シリアルコンソールは表に直接出ているので、そちらからコマンドで実施などする。
    なお、 “LED DISPLAY” ボタンはブート時にfailsafeに入る為に使用することは可能。
  • SFPポートにおいては、NTT等の小型ONUは恐らく使用できない
    NTTによって公開されている小型ONUの 仕様書 を参照すると、以下の通りの仕様となっていることが読み取れる。
    (DDMについては仕様書内に記載が無い為、外部Wiki を参照)

    DDM
    00
    Options
    0200
    SFF-8472 Compliance
    00

    上記から、小型ONUは

    • DDM (Digital Diagnostic Monitoring) 非対応
    • Power Level II(1,500mW)を要求
    • SFF-8472コンプライアンス情報無し

    であることがわかる。
    Linux Kernelにおいては、SFPポートにおけるデフォルトの電源供給能力は1,000mWに設定されており、これを超える電力 (Power Level) を要求するSFPモジュールが挿入された際、

    • SFPモジュールがSFF-8472コンプライアンス情報を提供しているかDDMをサポートしている → 1,000mWまでの供給に制限してモジュールを動作する
    • SFPモジュールがSFF-8472コンプライアンス情報を提供せずDDMもサポートしない → 完全に非対応モジュールとして扱い認識を失敗させ使用不可とする

    という挙動をする。(ここ
    Panasonic Switch-M8eG PN28080Kについては、SFPポートにおける仕様上の最大供給電力についての情報が得られておらず、デフォルトの1,000mWから供給能力設定を引き上げられていない。
    そのことから、前述の通り小型ONUの要求電力が1,500mWでSwitch-M8eG側の供給能力1,000mWを超過し、なおかつ小型ONU側がSFF-8472コンプライアンス情報もDDMも提供しない為、Linux Kernelにおいては完全に非対応のモジュールとして扱われ、使用不可となることが予想される。
    なお、DeviceTreeに変更を加えて動作させることは恐らく可能であるものの、設計上の電力供給能力がもし不足する場合は電子回路に過負荷を掛ける恐れがあることから、あまり推奨しない。故障等を引き起こすことを認識した上で、完全に自己責任として行うこと。

  • SFPモジュールは、現状Cisco GLC-SX-MMと10GtekのGLC-SX-MMD互換モジュールが動作することを手元で確認。
  • OpenWrtのリリース版については、22.03シリーズからサポートされる。

作業時の色々

  • 元々はSwitch-M8eG PN28080Kよりも先にSwitch-M24eG PN28240Kを確保して作業を進めていたものの、そちらにはOpenWrtのrealtek target(旧rtl838x target)において未だサポートが存在しないRTL8218FBが搭載されており、TP/SFPのコンボポートを正常に動作させる(特にSFP側)にはドライバにRTL8218FBサポートを追加する必要があることから、その作業が不要なSwitch-M8eG PN28080Kを先にOpenWrtに投げ込んだ。
  • 前項の通り当初はSwitch-M24eG PN28240Kを先に作業していたものの、後からSwitch-M8eG PN28080Kも確保して作業を開始し、両機種においてハードウェアに共通点がある程度存在することから、構成情報を記述するDeviceTreeにおいても共通使用するファイルを用意することとした。この共通ファイルについては何度かOpenWrtのチームメンバーなどとpatchを投げ込んだ際にやり取りして改善を重ね、最初に投げ込んでからそれなりに経過してようやくマージされた

色々

前述の通り、最初に投げ込んでから色々あった結果マージまでにだいぶ時間を要したものの、なんとかマージされ一安心。
家庭向けルータではもちろんのこと、安価帯のスイッチングハブでは搭載しないことが多いシリアルコンソールのポートを搭載していることからネットワークが不通となっても設定が行うことができる為、このSwitch-M*eG PN28xx0Kシリーズは個人的にお気に入りだったりします。ただ、Flash内にファイルシステムが存在しているなどして扱いに若干面倒な点はあるけれども。
シリーズ内の16, 24, 48ポートの他機種は現在作業中であり、おおよそはSFPポートを含めて動作する状態まで到達しています。が、realtek targetのKernelバージョン引き揚げ作業やその他の関係上、それぞれのサポートを投げ込むにはまだしばらく掛かります。

I-O DATA BSH-G24MB

自分が作業した中で2機種目のrealtek機サポート。
AML2-17GPで関わり始め、その後国内メーカー機からRealtek SoCを搭載するものを探し回った結果見つけた機種。
ステータスLED周りで若干気になる点があるなどして少し保留にしていたものの、今回マージされました。
まとめていきます。

仕様

先にマージされたAML2-17GPよりも多い24ポート搭載機であり、SoCは同じRTL8382Mを搭載しています。Flash容量は半減。

  • SoC: RTL8382M (500MHz)
  • RAM: DDR3 128MiB
  • Flash: SPI-NOR 16MiB
  • Ethernet: 1000Mbps x24
  • UART: JP2, 115200bps(リア側から3.3V, TX, RX, GND)

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

OpenWrt化

AML2-17GPと異なり、この機種においては直接sysupgradeイメージを投入することが可能です。

BSH-G24MBを起動してDHCPが機能しているネットワークに接続
通常通り電源を接続して起動し、DHCPサーバによりIPアドレスが配布されているネットワークに適当なポートを接続する
ファームウェア設定ページを開く
PCからBSH-G24MBのWebUIにログインし、ファームウェア更新ページを開く
sysupgradeイメージをリネームしたうえで投入
WebUIが求めるファイル名 “bsh-g24mb_v100.image” に変更したうえで選択し、”適用” ボタンを押下してアップデートを実行
完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動する

備考

  • 基板上のUARTはピンヘッダが最初から立っており、筐体も開けやすいことから比較的接続は容易。
  • 仕様で書いた通りFlashは16MBであり、その中でOSイメージを2つ持つ構造となっている為、1つあたりは 0x6B0000(6.69MiB弱)しか使用することができない。
    しかしながらこのサイズではOpenWrtでは若干厳しい為、メーカーファームウェアでは使用されていない2つ目の領域を1つ目と統合して 0xD60000(13.375MiB)を確保した。
  • 上記に絡んで、メーカーファームウェアのWebUIから投入する際に、ファームウェアサイズが大きい場合にはエラーとなるか、あるいは全体を書き込むことができず正常にブートできなくなる可能性もある。
    その場合、比較的接続が容易なUARTを用いて投入を行うことを推奨。ただし、電源内蔵タイプである為、感電には十分に注意すること

作業時の色々

  • 上でも書いた通りステータスLEDで若干気になる点はあったほか、搭載するFlashのサイズが小さい点がきになる機種ではあるものの、それ以外は特段癖は無いので比較的スムーズに作業を進められた。
    ステータスLEDが接続されているGPIOピンはGPIOとして使用することができるほか、RTL8382Mがハードウェア的に制御するステータスLED専用ピンとしても使用することが可能なものであり、メーカーファームウェアでは後者で構成されていた。しかしながらOpenWrtではハードウェア制御を適切に扱えるドライバが存在しない為、レジスタを切り替えてGPIOとして扱うように構成した。

色々

今回は丁度realtek targetにおいてKernelバージョンの引き上げなど様々な変更が入ってくる時期に当たったため、しばらく保留にするなどした関係上おおよその作業完了からPRをオープンするまでそれなりに時間を要した。しかし、PRをオープン後はそこまで時間を要さずマージされたので一安心。
上記の通りFlash容量が小さくメーカーファームにおけるファームウェアの最大サイズが小さい関係上、WebUIから投入できるサイズが若干厳しいので、その点が若干残念かなと思うところ。
なお、今のところはBSH-G08MやBSH-G16MB等、シリーズ内他機種のサポート予定はありません。

WRC-1166DSのOpenWrtにおける修正について

最近マージされた、WRC-1166DSのfactoryイメージに絡む修正についてです。書くかどうするか少し迷いましたが備忘録も兼ねて書いておくことにしました。

きっかけ

周囲でWCR-1166DSにOpenWrtを導入しようとした人から、factoryイメージを使用した結果文鎮化したということを聞いたのがきっかけです。
調べてみると既にいくつか同様の事例があるようで、サポートがマージされているということは当時問題無かったはずなのに何故だろうと気になって修正作業をすることにしました。
ただし、当初はやるかどうするかそれなりに迷いました。サポート済みの機種ではあることからわざわざ購入するのが若干心理的障壁に。結局は確保したけれども。

原因

過去に既に雑記で書いた通り、WCR-1166DSにおいてファームウェアに使用されているTRX形式のマジックナンバーが特殊なものであることが原因です。標準の 0x48445230 (“HDR0“) であれば何も問題無いものの、WCR-1166DSにおいては 0x5C436F74 (“\Cot“) が使用されている為に、OpenWrtでブートする際TRX形式であることを認識できず、rootfs領域の検出に失敗してKernelがマウントできずにpanicします。

サポート追加当時

あまりその辺は自分では調べていなかったので、修正を投げ込んだ時に対応して頂いたOpenWrtチームメンバーの人から聞いて知りました。
サポート追加時は、OpenWrtが抱えているTRX用のrootfs検出用ドライバにおいて、WCR-1166DS用に上記のマジックナンバーを検出できるようpatchが追加されており、それにより問題無く機能していました。(ここ
しかし、その後WCR-1166DSが属するramips targetにおいてLinux Kernelのメジャーバージョンが引き上げられた際、そのpatchが見落としか何かで新しいバージョンに引き継がれずに削除され、その結果WCR-1166DS特有のマジックナンバーを検出できなくなり、factoryイメージが正常に機能しなくなる状態に陥りました。(ここ

修正内容

ついでにSPI-NOR Flashのクロックを引き上げてアクセスを高速化したり(sysupgradeが速くなるなどする)、MACアドレスの構成周りをOpenWrt標準の関数を使用するようにしたりする変更も行っています

コミット

上記の変更により、現在はfactoryイメージをメーカーファームウェアのWebUIから投入した場合も、問題無くOpenWrtが起動する状態になっています。21.02リリースについては恐らく今後この修正がbackportされることは無く、次期メジャーリリースから直るものと思われます。

その他

今回の変更に絡んでWSR-2533DHPL (WSR-2533DHP)等でfactoryイメージを追加することができるようになりましたが、今現在作業中の機種が多すぎて時間が取れないため、作業予定は未定です。

ELECOM WRC-2533GS2

ELECOMのミドルレンジ帯で上寄りのこの機種です。マージされた後、他の機種の作業に注力していて後回しにしていたら記事を書くのが遅くなりました。
ひとまず、まとめていきます。

仕様

基本的な仕様は、既にサポート済みのWRC-2533GSTと大きくは変わりません。
法律の関係上、無線機能の使用は非推奨です。

  • SoC: MT7621A (880MHz, 2C4T)
  • RAM: DDR3 128MiB (NT5CC64M16GP-DI)
  • Flash: SPI-NOR 16MiB (MX25L12835F)
  • WAN/LAN: 1000Mbps/1000Mbps x4
  • UART: J4, 57600bps(RJ45側から3.3V, GND, TX, RX)

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

OpenWrt化

この機種もWRC-1167GHBK2-Sや他のGS/GSV/GSTシリーズと同一のファームウェアフォーマットであるため、factoryイメージの生成を行えています。

WRC-2533GST2を起動
通常通り電源を接続して起動。ルータモードを前提とする
WebUIからファームウェア更新ページを開く
PCとWRC-2533GS2を繋いで http://192.168.2.1 にアクセスし、ファームウェア更新ページを開く
ファームウェア更新
WRC-2533GS2のOpenWrtのfactoryイメージを選択し、アップデートを実行
完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動する

備考

この機種も変な癖は特に無し。なのであまり書くことが無い。

  • メーカーファームに戻す際は、公式サイトで公開されているアップデート用ファームウェアの先頭32byte(= 0x20、ヘッダ部分)を削って firmware パーティションに mtd コマンドで書き込む

作業時の色々

  • 基本的にはWRC-2533GSTとほぼ同じハードウェアであるものの、ソフトウェア面においてMACアドレスの格納位置が異なっており、その関係上既存のWRC-GS/GST用dtsiファイルについても変更を行う必要が生じた。
    ただしそれもあまり大きな変更ではないことからか、比較的早めにマージされた。

色々

ひとまず時間が掛からずマージされたので一安心。いつの間にかメーカーでは販売終了となっているものの、中古はある程度数が出ているので今のところは入手性についてはあまり問題ないと思われる。
この機種を以て、ELECOMの現在までに販売されたWRC-GS/GSV/GSTシリーズについてはWRC-1900GST2とX系列を除いて全てサポート済みとなり、ある程度選択肢が広がったと思う。
ちなみに、この機種もWRC-1167GS2と同様にWRC-2533GST等で採用されている筐体よりも若干大きい。