I-O DATA WN-AG300DGR

I-O DATAのサポート情報でOpenWrtのサポートができそうな機種を調べていた際見つけ、AR934xを搭載していると思われたことから確保して作業したものです。
ath79でサポート追加を行い、マージされました。まとめます。

仕様

初のAR1022搭載機です。SoC自体はほぼAR9342と同一らしく、無線機能のみ若干異なる模様。
2.4GHz帯にSoC内蔵の無線機能を使用し、5GHz帯にはmini PCIeスロットに装着されたAR93x2カードを使用しています。いずれの無線機能も、法的な問題から使用は非推奨です。
なお、openwrt/openwrtのcommit messageにはFlashが8MBと書きましたが、実際には16MBの誤りです。

  • SoC: Atheros AR1022 (535MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB (W9751G6KB)
  • Flash: SPI-NOR 16MB (MX25L12845EMI-10G)
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4 (AR8327N)
  • USB: USB 2.0 Type-A x1
  • UART: 115200bps(RJ45側からVcc, GND, TX, RX)

その他ハードウェアやKernel等細かい点の詳細については、雑記ブログにメモしてあるのでそちらを参照。

OpenWrt化

以前サポートしたWN-AC1600DGR2等と同じくSenaoによる製造であり、特殊な点は無いためfactoryファームを生成できます。

  • WN-AG300DGRを起動
  • WN-AC1600DGR2に電源ケーブルを繋ぎ、普通に起動。

  • WebUIにアクセス
    PCとWN-AG300DGRをLANケーブルで繋いで http://192.168.0.1/にアクセス
  • ファームウェア更新ページへアクセス
    ファームウェアの手動更新ページへアクセス
  • ファーム更新
    WN-AG300DGRのfactoryファームを選択し、アップデートを実行
  • 完了
    Flashの書き込みが完了後再起動され、OpenWrtで起動してくる

備考

  • WN-AC1600DGR2やWN-AC1167DGRと同様、stock firmwareではOSイメージ領域 (Kernel + Rootfs) が “Kernel” として構成されており、ファームウェア更新時にはそこを丸ごと書き換える仕組みのため、factoryファームは問題なく作成できた。
    設定等保存用の “storage” パーティションは使用せずread-only。
  • 5GHz帯用のAR93x2に使用するeepromデータが “ART” パーティション内に存在しなかった。恐らくはmini PCIeカード内で持つなどしていると思われ、デバイス固有のMACアドレスの適用は 10_fix_wifi_mac にて行った。
  • ath79のビルドが公式buildbotで既に開始されているため、downloads.openwrt.org よりダウンロード可能 になると思われる(記事執筆時点ではまだビルドが走っていない)。 2018/12/09確認。
  • NATの速度は、offloadingオフで平均205Mbps前後、Netfilter Flow Offloading使用時で平均650Mbps – 700Mbps前後

色々

しばらくリポジトリでのデバイスサポートのPR処理が止まっていたため保留にしていたものの、再開されたようなので今回この機種を投入。AR1022 (≒AR9342)とはいえOffloading併用でNAT速度は十分に出るうえ、USBポートも搭載しておりまだまだ現役でいけそう。
ただ、中古で出ている数が今一つ少ないように感じられるのが気になる。

広告

BUFFALO WZR-HP-G302H A1A0

以前、東久留米のハードオフでジャンク品を入手したもの。その後ath79への移植を行おうとシリアル (UART)のピンを立てるも読むことができず保留にしていましたが、解決でき作業も完了してマージされました。まとめます。
なお、今回のサポートは “A1A0” バージョンに対するものです。その他バージョンについてはハードウェアを確認できていないほか、”中身が異なる” という情報もあるため非対応としています。また、WZR-HP-G300NH2/WZR-300HPとも別に独立して “WZR-HP-G302H A1A0” としてのサポートです。

仕様

WZR-HP-G450Hと同様、AR7242を搭載する無線機です。

  • SoC: Atheros AR7242 (400MHz, 1C1T)
  • RAM: DDR2 64MB
  • Flash: SPI Flash 32MB (16MB x2)
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4
  • UART: 115200bps(RJ45ポート側からVcc, GND, TX, RX)

その他ハードウェアやKernel等細かい点の詳細については、雑記ブログにメモしてあるのでそちらを参照。

OpenWrt化

こちらはWZR-HP-G450Hとは異なりメーカーファームでのファームチェックをパスできたため、Debugモードを使用する必要はなく直接投入することができます。

  • WZR-HP-G302H A1A0を起動
    電源ケーブルを接続し、通常通り起動。
  • WebUIにアクセス
    PCとWZR-HP-G302H A1A0をLANケーブルで接続し、http://192.168.11.1/ のファームウェア更新ページにアクセス
  • ファーム更新
    WZR-HP-G302H A1A0用のfactoryファームを選択し、アップデートを実行
  • 完了
    ファーム更新後、OpenWrtで起動してくれば完了

備考

  • ハードオフで購入後、何日か後にシリアルのピンを立ててハードウェアを調べようとしたものの、その際一切信号が出力されずコンソールに何も表示されない状態だった。
    • 色々調べたもののその際は何も情報を見つけることができず、一旦作業は保留とした。
    • その後ふとしたきっかけで再度調べ直してみたところ、OpenWrt Wikiに “U-BootによってUARTがデフォルトで潰されており、使用するには設定を変更して有効化する必要がある” という記述を発見。最初に調べた際は見落としていた模様。
    • 記載されている通りU-Bootの環境変数に force_uart=1 を設定したところコンソールにログが出力されるようになり、作業を再開した。
  • これもFlashを2枚搭載していてWZR-HP-G450Hと同じ問題にあたったものの、前述の通りUARTの問題を解決するのに時間が掛かったため、作業再開時には既にFlash 2枚を扱うドライバはマージ済みだった。
  • Kernel 4.14以降のNetfilter Flow Offloadingを雑に試してみたところ、300Mbpsも出なかった(少々記憶は曖昧ではある)。Offloadingをオフの時は200Mbpsを切っていた。
  • ar71xxではWZR-HP-G300NH2のファームで動作する機種の模様。ath79でもar71xxにあるWZR-HP-G300NH2のコードを流用しているものの、mtdパーティションの構成がわずかに違っていた(firmware領域がG302H A1A0では0x30000 (= 192KiB)小さい)。
    OpenWrtで使用する分には、恐らく問題ないとは思われる。ath79のG302Hでは、メーカーファームと同じパーティション構成に設定。
  • USBポート横のLEDは、USBポートにデバイスを接続した際点灯するように設定済み。
  • WZR-HP-G302Hの別のバージョンやWZR-300HPについては、現状所有していないので作業予定は無し。ジャンク等で安く放出されていない限りは、あまり積極的に確保はしない予定。

色々

UART周りの問題によってだいぶ手間取ったものの、最終的にath79へのサポート追加までできたので、何もできず積むだけにならず良かった。
しかしながら備考に書いた通りNATのパフォーマンスは非常に残念で、新し目のサポート済み機種へのリプレースを強く推奨。類似のWZR-300HP等についてもあまり魅力を感じないため、前述の通り積極的に動く予定は無し。factoryファームがスルッと入るのは良いのだが…。

BUFFALO WZR-HP-G450H / BHR-4GRV (ath79)

某氏からごそっと頂いた、BUFFALOのQCA/AR機のうちの2台。将来廃止が予定されるar71xxからDTSベースで新設されたath79へ移植するにあたり少々大きい問題があったものの、他の方々により解決されたのでこの2機種についてもサポートの修正/追加を行い、マージされました。まとめます。

仕様

Atheros AR7242を搭載する無線 / 有線機。G450Hでは内部的にPCIeでぶら下がっている無線チップを利用。
2機種とも無線以外は同一の構成。

  • SoC: Atheros AR7242 (400MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB
  • Flash: SPI Flash 32MB (16MB x2)
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4
  • UART: 115200bps(JP1: リセットボタン側からVcc, GND, TX, RX)

また、WZR-450HPは単にWZR-HP-G450Hからのリネーム品であり、ハードウェアは全く同一であるため、WZR-HP-G450Hとして扱いました。

OpenWrt化

ar71xxと同様にfactoryファームを作成したものの、メーカーファームでのファームチェックをパスできなかったため、debugモードのページからの投入を前提としています。

  • WZR-HP-G450H / BHR-4GRVを起動
    いずれも電源ケーブルを接続して普通に起動
  • WebUIのDebugモードにアクセス
    http://192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/firmup.html にユーザー名: bufpy 、パスワード: otdpopy を使用してアクセスする
    メーカーファームのバージョン1.88以降はDebugモードが削除されているため、その場合は古いバージョンへ更新してから再度行う


    注: WZR-450HPでDebugモードが存在するファームウェアはバージョン1.96以前
  • ファーム更新
    前述のURLのページでBHR-4GRV / WZR-HP-G450Hそれぞれのfactoryファームを選択し、”OK” ボタンを押してファーム更新を実行する
  • 完了
    ファーム更新を実行後、OpenWrtで起動してくれば完了

備考

  • WZR-HP-G450HとBHR-4GRVはSPI-NOR Flashを2枚搭載しており、ブート中に仮想的に結合して1つのデバイスに見せかけて扱う必要がある。
    • ar71xxではデバイスのmachファイルと同じ場所に置かれている dev-m25p80.c 内の ath79_register_m25p80_multi() により結合が行われていたが、ath79ではこれを行える仕組みが存在していなかったため、サポートの修正 / 追加に時間が掛かった。
    • 丁度、同様にFlashを2枚搭載しているWZR-HP-AG300Hの移植作業を行う方が現れ、Forum等で議論しつつath79で利用できるドライバの実装等が行われ、最終的にWZR-HP-AG300Hと一緒にマージされた。
    • このためath79の他のデバイスでもFlash 2枚を扱うことができるようになり、ath79 targetの設置時からコードが存在はしていたもののFlash部分の定義が抜け落ちており動作しなかったWZR-HP-G450Hの修正と、BHR-4GRVのサポート追加を行った。
  • ar71xxではBHR-4GRVもWZR-HP-G450Hのファームを使用して動作させることはできていたものの、ath79では独立したデバイスとして追加した。
    • 無線機であるWZR-HP-G450Hに対してBHR-4GRVは有線機であり、無線機能のほかLED類など2機種間で名前やその他が異なる、あるいは存在しないものがあり、BHR-4GRVでWZR-HP-G450Hのファームを使用するのはあまり適切ではないかな、と感じたため。
    • BHR-4GRVでは存在しないLEDやボタン類、無線の定義を落としたほか、WZR-HP-G450Hでは “security” という名前のLEDをBHR-4GRVでは “vpn” として実態に合わせた。
    • この2機種のath79サポートがマージされた後に気付いたが、2機種でMACアドレスを保持している “ART” パーティション内のアドレスも異なっていた。恐らくar71xxでBHR-4GRVにWZR-HP-G450Hのファームを使用した場合、個体本来のMACアドレスではなくOpenWrtによって生成されたランダムなアドレスが使用されていると思われる。
      ath79では慌てて修正を行って追加でPRを投げ、それもマージされた。
  • USBポート横のLEDは、USBポートにデバイスを接続すると自動的に点灯するよう設定済み
  • Kernel 4.14以降のNetfilter Flow Offloadingを利用してNATの速度を雑に計測したところ、BHR-4GRVでは平均445Mbps程度を記録(オフ時は240Mbps程度)。
  • ath79は現在公式buildbotでビルドされないため、自ビルドが必要。 -> source-onlyフラグが削除されて公式buildbotでのビルドが開始され、公式のダウンロードページ (downloads.openwrt.org) での提供が開始されました。
    当方のビルドは taiha.net/jenkins に有(自己責任で使用すること)。

色々

今回はFlashを2枚搭載していることがとても大きな障壁となり、作業を進めるのにとても時間が掛かった。ドライバを書く知識や技量も無いため、自分ではほとんど何もできなかったのが残念というか悔しいというか。
今回の2機種(厳密にはWZR-450HPを含めて3機種)に関しては、だいぶ古い型ではあるもののNATがOffloadingを使用して445Mbps程度出るため、まだ何とか使えるかな、という感じ。ただ、とにかく速度を求めるのであれば、そろそろリプレースを考えるのも良さそう。

ELECOM WRC-300GHBK2-I

しばらく前に某フリマサイトで見つけ、QCA9563と思われることから購入したものです。デバイス自体のサポートはあまり時間が掛からず完了していましたが、factoryファームの生成に手間取り遅くなりました。
最近になってようやく解決できた為、PRを出してマージされました。まとめます。

仕様

今回は初めてとなるQCA9563搭載機。無線は2.4GHz帯オンリーで、SoC内蔵の無線機能を使用するのみで完結しています。

  • SoC: Qualcomm Atheros QCA9563 (775MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB (NT5TU32M16EG-AC)
  • Flash: SPI Flash 8MB (MX25L6406E)
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4
  • UART: 115200bps(RJ45側からTX, GND, RX, Vcc)

その他ハードウェアやKernel等細かい点の詳細については、雑記ブログにメモしてあるのでそちらを参照。

OpenWrt化

WRC-300GHBK2-Iではメーカーファームでのアップデート時の挙動の関係上、squashfsは使えずinitramfsイメージでfactoryファームを生成しています。
このため、factory投入後sysupgradeファームを書き込む必要があります。

  • WRC-300GHBK2-Iを起動
    WRC-300GHBK2-Iに電源ケーブルを接続し、普通に起動。
  • WebUIにアクセス
    PCとWRC-300GHBK2-IをLANケーブルで接続し、 http://192.168.2.1/ のファームウェア更新ページにアクセス
  • ファーム更新
    WRC-300GHBK2-I用のfactoryファームを選択し、アップデートを実行
  • sysupgradeを実行
    factory投入後initramfsファームで起動してくるので、
    sysupgrade openwrt-ath79-generic-elecom_wrc-300ghbk2-i-squashfs-sysupgrade.bin
    を実行しsysupgradeファームをFlashに書き込む
  • 完了
    Flashへの書き込みが完了後再起動され、OpenWrtが起動してくれば完了

備考

色々

今回は上記の事情に絡んで色々とツッコミどころが多い(と予想する)PRだったものの、しばらく反応が無い期間が続いた後GitHubから通知が来たので見に行ったら “merged, thanks!” というメッセージのみでマージされていて、驚くとともに変な笑いが出てしまった。
Flashは8MBと若干少なめながらもoffloadingを併用すればある程度出るため、ルータとして基本的な使い方をするには良い機種かなぁとも。中古価格も安め。

I-O DATA ETG3-R

イーサネットのパフォーマンスへの影響が大きい問題が発覚しました。現在解決の為色々探っています。
→ 修正しマージされました。

ファームを調べ、AR9342を搭載していることが判明したので以前WRC-1167GHBK2-Sと同時に購入した機種です。
デバイス自体はあまり時間は掛からずOpenWrtで動作するようにはできていたものの、一部不明な点がありPRを見送っていましたが、解決できたのでPRしマージされました。まとめます。

仕様

AR9342を搭載する有線機です。SoCが無線機能を搭載しているのが若干気になりますが、世代がおよそ同じWN-G300GRがおよそ同じ構成なのではと予想。実際のところはWN-G300GRがアップデートファーム提供されいていないので不明。→ 全く違っていた(WN-G300GRはRTL8198)
電源は付属ACアダプタ5V 1A、筐体ラベルでは5V 900mA

  • SoC: Atheros AR9342 (533MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB
  • Flash: SPI Flash 8MB
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4
  • UART: 115200bps(RJ45側からVcc, GND, TX, RX)

その他ハードウェアやKernel等細かい点の詳細については、雑記ブログにメモしてあるのでそちらを参照。

OpenWrt化

現行のWN-GX300GRなどと同様にOS (Linux) イメージを2つ持つ構造です。Flashが8MBのため、WN-GX300GRと同様にOS一つあたり4MB弱しか確保できず、ほかにも問題がありfactoryファームは用意できませんでした。
筐体は開けやすく、UARTのピンは最初から立っていたので難易度はさほど高くないと思われます。

  • TFTPサーバを用意
    ETG3-R用のOpenWrt initramfsファームを “1500A8C0.img” にリネームしたうえでTFTPディレクトリに配置し、PC側のIPアドレスを 192.168.0.10 に設定してETG3-RのLANポートと接続、TFTPサーバを起動する。
  • シリアルを接続してETG3-Rを起動
    シリアル (UART) をPCと接続してETG3-Rを起動。
  • U-Bootのコンソールに入る
    ETG3-Rを起動中、U-Bootが “Hit any key to stop autoboot:” をカウントダウンと一緒に表示しているタイミングで何らかのキーを押し、U-Bootのコンソールに入る。
    使用した個体はシリアルを接続した状態では初回起動が上記メッセージに到達する前に途中で止まってしまうため、シリアル未接続のまま起動して途中から接続、メーカーファームのKernelから reboot を叩いて再起動させた。
  • 環境変数を設定
    ETG3-RがOpenWrtを起動できるようにするため、以下のコマンドを実行して環境変数を変更する。

    • setenv bootsf 1
    • setenv mtd_kernel1 "bootm 0x9f050000"
    • saveenv

    上記設定を行うとメーカーファームは起動できなくなるため、その点に注意すること。

  • initramfsファームで起動
    U-Bootのコンソール上で “tftp; bootm” を実行し、TFTPサーバからinitramfsファームのダウンロードとそれを使用しての起動を行う。
  • sysupgradeファームを書き込む
    initramfsファームで起動したら、ETG3-Rの /tmp など適当な場所にsysupgradeファームをダウンロードしたうえで “mtd erase firmware” を実行しメーカーファームを削除、sysupgradeファームを使用して通常通りsysupgradeを実行してFlashに書き込む。
  • 完了
    sysupgrade後、OpenWrtが起動してくれば完了。

備考

  • factoryファームを用意できなかった理由は、前述のOSイメージ領域のサイズの他メーカーファームでmtdパーティションの切り方が以下の通りになっていること。
    image1 image2
    rootfs1 uImage1 rootfs2 uImage2
    0x050000
    – 0x310000
    0x310000
    – 0x410000
    0x410000
    – 0x6D0000
    0x6D0000
    – 0x7D0000
    0x2C0000
    (2.75MiB)
    0x100000
    (1.00MiB)
    0x2C0000
    (2.75MiB)
    0x100000
    (1.00MiB)

    このため、initramfsでfactoryファームを作ろうにも全くサイズが足りない。
    ちなみに、メーカーファームではアップデートファームがtar形式で提供されており、その中のuImageとrootfsをそれぞれ書き換えるという方法を採っている。

  • また、メーカーファームでは上記の通りrootfsの後ろにkernelがくる構造の為、U-Bootでは初期状態でrootfs分のoffsetを取った位置をkernelのアドレスとして指している。さらにはU-Boot自体が素の状態に人力でこのパーティション構成から起動できるように組まれている節があり、WN-GX300GR等の様に “uImageのロードに失敗したら別のアドレスからの起動を試行する” というようなことを全くやってくれない。
    これらが原因で、どうしてもこの機種ではU-Bootの環境変数内にある以下の2つを変更する必要が出てしまう。
    • bootsf: ブートするOSイメージの指定。OpenWrtでは2つのOSイメージの領域を1つにして扱うため、”1″ に設定する。
    • mtd_kernel1: 1番目のOSイメージを起動するためのコマンド。デフォルトでは上記のパーティションの表からもわかる通り “bootm 0x9f310000” だが、OpenWrtではKernel, Rootfsという順番にしてFlash内を効率的に使用したいため、 “bootm 0x9f050000” に書き換えてOSイメージ領域の先頭から起動するよう変更する。
  • WN-AC1600DGR2やAC1167DGR同様にMACアドレスをU-Bootの環境変数に持つのみであるため、LAN/WANへはOpenWrtのスクリプト内で設定。
  • 前述の通りAR9342機であるものの、ath79には “ar9342.dtsi” は用意されておらず、どれをincludeすれば良いかわからなかったのがPRを見送っていた理由。
    最近になり、AR9342機で “ar9344.dtsi” をincludeしたPRが出ており、wikideviで確認したところ確かにAR9341ではなくAR9344とほぼ似通ったSoCであるらしく、解決した。
  • ath79の機種であるため、現時点では公式のbuildbotではビルドされず自ビルドの要あり。 -> source-onlyフラグが削除されて公式buildbotでのビルドが開始され、公式のダウンロードページ (downloads.openwrt.org) での提供が開始されました。
    当方のビルドは taiha.net/jenkins に有(自己責任で使用すること)。

色々

今回作業開始からPRを出すのはかなり遅くなってしまったものの、早い段階である程度固められていたこともあり、特に指摘など無くすんなりマージされたので良かった。
ar71xx/ath79では現状HW NATが未サポートなこともありNATではQCA9557機に比べて速度は劣るものの、単純にswitchとしてならばしっかり出るのでその方向も良いかなとか。