大破雑記帳

個人用メモな雑記ブログ いろんなことをざっくりと。

OpenWrtのrealtek targetについて

これは A:don:vent Calender こと「mstdn.maud.io Advent Calender 2021」11日目の記事です。
先週土曜日くらいまで危うく忘れかけてた

前回2020年はその年に買ったものを挙げましたが、今回は趣向を変えてOpenWrtにおける realtek target" について書いてみることにします。
前置きが長いので、本題から入りたい人は飛ばしてください

そのスイッチングハブ、何のチップが入っているかご存じですか

まず、ざっくりとスイッチングハブがどういう構成になっているかだけ書いておく。 世の中には
  • アンマネージド(ノンインテリジェント)
  • マネージド(インテリジェント)
の2つに大別されるスイッチングハブがあり、他にアンマネージドプラスとかあったりもするが、ここではマネージドにざっくり分類することとする。

アンマネージドスイッチ

ざっくりと言ってしまえば、管理機能が無く、ユーザーによる詳細な設定が不要な(できない)スイッチングハブ
基板上の回路構成によりハードウェアの設定が自動的に行われるほか、ポートの取り扱いなどの構成情報も内部に存在するスイッチングハブチップが外部フラッシュメモリから直接読み出してそのまま適用する為、ユーザーが設定する余地は(ほぼ)無し。
できるとすれば、ループ検出機能のON/OFFくらい。

マネージドスイッチ

これもざっくり言ってしまえば、管理機能が付いていて、特に設定しなくても(大抵は)単純なスイッチングハブとして使えるものの、追加で設定することにより様々な機能が利用できるもの。
こちらの場合、大抵はスイッチングハブのチップに加えてSoCが搭載されたり、あるいはスイッチングハブ機能を持ったSoCを搭載している。
ハードウェアの構成を行うのは比較的SoCの割合が高く、また、CPUが存在することからユーザーの設定を受け付けてそれをポートの取り扱いに反映させることが可能となっている。

スイッチングハブに使われるチップ類

機種によって千差万別。ただし、上に挙げたマネージドスイッチの場合において、SoCとスイッチングハブチップの両方を搭載する場合は、SoCのベンダがスイッチングハブチップを作っていれば同じベンダで組み合わせるのが一般的。
主に(筆者が把握している範囲では) などがスイッチングハブ向けSoCやスイッチングハブチップを製造している。スイッチングハブチップに限ればAtheros (Qualcomm Atheros)もあったりするが、Atherosは製品としてのスイッチングハブでの採用例は把握していないのでここでは除外。
余談: アンマネージドスイッチングハブに使用されるチップもそれ自体はVLAN等をサポートしていることが多く、海外にはアンマネージドスイッチングハブで制御用の信号線にアクセスして、VLANなどの設定を流し込めるようにしてしまった猛者もいる模様。

スイッチングハブでの搭載チップベンダ

把握している中での例を挙げていく。ひとまずSoCを。 例 (Panasonic Switch-M24eG PN28240K):
  • RTL8382M: SoC, CPU -> MIPS 4KEc 500MHz, TP 8ポート
  • RTL8218B: SWハブ, TP 8ポート
  • RTL8218FB: SWハブ, TP 4ポート + TP/SFP 4ポート(コンボ) (Switch-M24eGでは2ポートのみTP/SFPで共用)
その他は wiki.taiha.net を参照。海外機については、realtek機中心であるものの models [Switches] や、全般的にはWikiDevi系サイトにいくつか掲載されている。
前置きが長くなったが、上に挙げた中でSwitch-M24eG PN28240Kの搭載するRealtek SoCが今回の主役(であるRealtek系機種)。

OpenWrtにおけるrealtek target

OpenWrtではベンダやSoCの系統で分類したものを "target" と称しており、今現在OpenWrtのmasterに存在する "realtek" targetは源流を "rtl838x" targetとするもので、早い話スイッチングハブ向けSoC用のtargetということ。
無線機向けのRealtek SoCにも今後このtargetで動かせる可能性が無いことも無いモノは存在しているものの、現時点では入ってくる予定などは無し。

realtek targetにのめり込むまでの経緯

OpenWrt Forumに突如「スイッチングハブでOpenWrt動かしてみた」が降ってくる
面白すぎるでしょ
Support for RTL838x based managed switches - For Developers - OpenWrt Forum
突如としてOpenWrt Forumに立てられたトピック。それまでRealtek SoCを搭載する無線機で動かしてみたというものはたまに立てられたり浮上してきたりということはあったものの、スイッチングハブは完全に意識の外だった。引き寄せられないはずが無かった
ベースにしているコードもOpenWrtの最新に近く、DeviceTreeでおおよそ構成できるようになっており、プラットフォームのサポートとしても、それまでたまに出てくることがあった無線機向けRealtek SoCのサポートと比べて上々。
短期間一緒にコードの改善作業をする
偶然にも、それ以前にrtl838xとは全く別件でハードオフで確保していたAML2-17GPがこれに該当するプラットフォームであることに気付き、早速トピックを立てた方のコードを利用してビルド。無事ブートして動作した。
「AML2-17GPで動かしてみたよ」というのを投稿した後、色々あって少しの間一緒にコードの改善作業をすることになり、大体以下のようなことをした。
  • Linux Kernelにおける変更をファイルの上書きからpatchへの変換
  • Kernelのオプションが多重になっていて冗長な個所をシンプル化
  • OpenWrt内でLinux Kernel 4.19から5.4への移行が進んでいた為、4.19をベースにしていたrtl838x targetのコードを5.4へ移行
トピックの様子を静観
諸事情があって一緒のコード改善作業を終わりにした後は、しばらくトピックの様子を静観していた。
それまでの無線機向けサポートと比べてコードの状態は上々ではあるものの、Linux Kernelにはサポートが無いSoCであり、OpenWrt側でプラットフォームサポートのコードを全て抱えることから、OpenWrtにマージされるかは正直わからなかった。その為、この時期はAML2-17GPもしっかりした調整は手を止めていた。
rtl838x target、マージされる
そんなこんなで若干不安視していたのは杞憂に終わり、rtl838x targetはめでたくOpenWrtにマージ。OpenWrtチームメンバーも何人かはだいぶ興味を持っているようで、PoE制御の為のユーティリティがMLに投稿されるなどしている。
マージされたことでデバイスサポートもOpenWrt公式でマージされるようになったため、ここで一気にモチベーションが爆上がりした。
この後、OpenWrt内でドライバ類が書き直されたり、最初にトピックを立てた方やその他の方などによってついにはOpenWrtの上流に位置するLinux KernelにもSoCサポートやいくつかのドライバが投げ込まれ、マージされている。
その間、個人的には中断したAML2-17GPのサポート作業を進めたり、このtargetでサポートできるスイッチングハブを探し始めたりした。
なお、rtl838x targetは後に "realtek" targetへと改名された。

これまでにrealtek targetで私がやったこと

記事執筆時点で、以下をやった。
  • INABA Abaniact AML2-17GPのサポート追加
  • realtek targetへのLinux Kernel 5.10サポート追加
AML2-17GPについては、上で書いた通りごく初期にコードを書いてしばらく中断していたため、最新のコードに合わせ調整して投げ込んでマージ。
Kernel 5.10のサポート追加については、OpenWrtに全体として5.10サポートが追加された少し後に個人的なものとして始め、Forumの上で挙げたトピックに進捗を書いたり、あるいは躓いたところを聞いてみるなどして進め、一点気になる箇所はあったものの無事マージ。その後しばらくしてtargetのKernelバージョンも5.10へ切り替えられた。

現在realtek targetでやっていること

これも記事執筆時点。
  • 機種サポート追加
    • APRESIA ApresiaLightGS120GT-SS
    • I-O DATA BSH-G24MB
    • Panasonic Switch-M8eG PN28080K Switch-M24eG PN28240K Switch-M48eG PN28480K
  • realtek targetへのLinux Kernel 5.15サポート追加
機種サポートについては、ぶっちゃけ興味があまりにも先走りすぎてしまい、ヤフオクで落札したりメルカリで確保したり、APRESIA機に至っては中古でほとんど出てこないので、新品を購入。
Switch-M24eG PN28240KとSwitch-M48eG PN28480KはSFPポートの為にRTL8218FBを搭載するものの、現在OpenWrt内に存在するドライバではサポートされておらずTPポートしか機能しない状態の為、チップのサポート追加を試行中。TP/SFPを切り替えて大体問題無く通信できる状態まで到達した。
Switch-M16eG PN28160Kは中古価格が高くなりがちなので見送り中。 Linux Kernel 5.10のサポート追加が完了して一息ついていたら、あまり経たずにOpenWrt全体へ5.15サポートを追加するPRがオープンされた。プロジェクトとしては、次のリリースに5.10を使用することは決定事項であることからそのPRは次期メジャーバージョンがリリースされるまでマージされないものの、興味があったのでそのPRを利用してrealtek targetへの5.15サポート追加にトライ中。
ネットワーク周りの変更が(特にDSAサブシステム)5.10から5.15の間で大きい為、現状そこが上手く動かないほか、Switch-M8eGで不可解なトラブルが起きることを確認。 上から
  • AML2-17GP
  • BSH-G24MB
  • Switch-M8eG PN28080K
  • Switch-M24eG PN28240K
  • Switch-M48eG PN28480K
  • ApresiaLightGS120GT-SS

今後realtek targetでやること/やりそうなこと/やりたいこと

  • SoCとしてRTL839xを搭載する機種のCPUにおけるマルチスレッディング周り
  • Kernel 5.15サポート追加に際してのネットワーク周り修正
  • 国内メーカーPoE機のサポート追加
現在realtek targetに存在する機種は全てがRTL838x SoCを搭載するもののみで、マルチスレッディングに対応し見かけ上2コアを使用できるRTL839xを搭載するものや、10Gbps対応機に使用されるRTL93xxを搭載するものはまだ無い。
その為、今後上のトピックを立てた人を中心にRTL839xやRTL93xxでのマルチスレッディング対応が進められるが、それについても個人的に学習も兼ねて探ってみたい。
ちなみに、Panasonic Switch-M48eG PN28480KにはRTL839xファミリーのRTL8393Mが搭載されている。
Kernel 5.15についてはまだ猶予が十分すぎるほど存在するので、ひとまずゆっくりとDSAやドライバのコードを読み込みつつ、問題を洗い出し必要なら詳しい方に聞いて修正を進める。
既に非PoE機は複数所有しているもののPoE機は一台も無く、Kernel 5.10へのバージョン引き上げの際PoEに関連する点に気付かず、PRでコメントを受けて確認して不足に気付くなどした。もし今後可能なら、PoE機も確保することを思案中。

まとめ

とにもかくにも、スイッチングハブでOpenWrtが動くというのがあまりにも新鮮で、なおかつMediaTekQualcomm AtherosなどのSoCとは異なり現在進行形でプラットフォームサポートの構築が進んでいる状況なので、組込ハードとLinux Kernelの両面について理解を深めるのに丁度良く、楽しみながら参加中。
スイッチングハブ内部でどのチップがどう接続されているかというのを探ったり、Kernelバージョンの引き上げ作業を通して実際に知識が付いてきているのは実感していて、以前できなかったことが時間を経てできるようになったり、多少のヒントがあれば筋道を思いつくようになるなどしていて、とても楽しい。
まだまだ興味冷めやらず、時間を作りながら参加していきたいところ。

「mstdn.maud.io Advent Calender 2021」、次の12日目は kozue 氏です。