BUFFALO 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の件はもっと早く知りたかった…。

広告

ELECOM WRC-1750GHBK2-I/C

明けましておめでとうございます。そしてサポートまとめ記事書初め。
久しぶりのELECOM機です。もうしばらく前にデバイスのサポート自体はおおよそ完了していたものの、factoryファーム生成コード関連に少々悩ましいところがあり、保留していました。
今回投入し、マージされました。まとめます。

仕様

以前投げ込んだWRC-300GHBK2-Iと同じ、QCA9563を搭載しています。”WPS” 以外のLED色が異なるもののハード面はほぼWRC-300GHBK2-Iと共通であり、WRC-1750GHBK2-I/Cは追加で5GHz帯用のチップを搭載しています。
また、WRC-1750GHBK2-IとWRC-1750GHBK2-Cはハードウェアが共通であり、単一のデバイスとしてサポートを行っています。WRC-1750GHBK-Eも恐らく同一のハードウェアと予想されますが、実機が無く確認できていないため、サポート対象には含めていません。無線機能の使用は、法律の関係上非推奨です。

  • SoC: Qualcomm Atheros QCA9563 (750MHZ, 1C1T)
  • RAM: DDR2 SDRAM 128MB (K4T1G164QG-BCF7)
  • Flash: SPI-NOR 16MB (MX25L12835FMI-10G)
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4 (QCA8337N)
  • UART: 115200bps(QCA8337N側からVcc, RX, GND, TX)

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

OpenWrt化

WRC-300GHBK2-Iと同様、メーカーファームにおけるファームウェアアップデートの挙動の関係でsquashfsではなくinitramfsファームを利用してfactoryファームを生成するようにしています。
このため、factoryファームを投入後追加でsysupgradeファームを書き込む必要があります。

WRC-1750GHBK2-I/Cを起動
WRC-1750GHBK2-I/Cに電源ケーブルを接続し、普通に起動
WebUIにアクセス
PCとWRC-1750GHBK2-I/Cを接続し、 http://192.168.2.1/ のファームウェア更新ページにアクセス
factoryファーム投入
OpenWrtのfactoryファームを選択し、アップデートを実行
sysupgrade
factoryファーム (initramfs)でOpenWrtが起動するので、squashfs-sysupgradeファームを用いてsysupgradeを行い、Flashに書き込む
完了
sysupgradeファームの書き込み後再起動され完了

備考

  • factory関連で悩ましい点というのが、既存のWRC-300GHBK2-Iサポート時に一緒に投入したfactory生成コードが非常に長く、読解しずらいところ。initramfsイメージのビルドとsquashfsイメージのビルドは別個であり、initramfsイメージを利用して別用途のファームウェアを生成する場合はsquashfsイメージの既存生成コードが利用できず、新たに追加する量が多くなってしまう。
    WRC-1750GHBK2-I/Cの場合WRC-300GHBK2-Iと同様にメーカーファームではヘッダが一緒にFlashへ書き込まれてしまうため、squashfsイメージを利用した場合rootfsのマウントに失敗してしまう。このためinitramfsイメージを利用してfactoryファームを生成する必要があるが、既存のWRC-300GHBK2-I用コードをどうにか整理したかった。
    結局様々な理由からそのままWRC-300GHBK2-I用コードをWRC-1750GHBK2-I/Cでも利用する形で投入したものの、PRに対応したメンテナ氏から「patchを試してほしい」という提案があり、その結果を反映してメンテナ氏により整理を行って頂いた。感謝。
  • ハードウェア的にほぼ同一であるため、Netfilter Flow Offloadingを使用したNATのスピードはWRC-300GHBK2-Iとほぼ同程度(700Mbps~)。
  • OpenWrt公式ダウンロードサイトでの提供は、1月1日現在既に開始されていることを確認。
  • OpenWrtではWRC-1750GHBK2-Iファームとして提供されるものの、WRC-1750GHBK2-Cに対してもfactoryファーム含め使用可。

色々

WRC-1750GHBK2-I/Cは中古でもそこそこ数が出る(ように感じる)ほか、比較的安価なことも多いのでUSBが必要なければ良いかな、という感じ。用途に応じて、RAM容量とFlash容量でWRC-300GHBK2-Iとこの機種から選ぶのも良さそう。

最後に

今回のWRC-1750GHBK2-I/Cが滑り込み(約40分前)で私としては2018年最後のデバイスサポートになりました。2017年11月に1件だけ投げ込んだあとは全て2018年初頭からであり、2018年の一年に渡ってTwitterやMastodonでアドバイスや情報提供して頂いたり、時には様々な機種を送って頂いたり、多大な応援を頂き本当に感謝です。また、不慣れ無知極まりない私が出したPRにお付き合い頂き、いつも的確な指摘をして下さったOpenWrtプロジェクトメンバー各位、本当にありがとうございました。そして2ch (5ch)の各位も、お叱りや応援など下さり、ありがとうございました。
2019年はまだ今後どうなるか何もわかりませんが、精神的に大きく壊れない程度に、少しずつ頑張っていこうと思います。また、新規のデバイスサポートも自分の知識習得等を主目的として、時間とお金の許す範囲でゆっくり進めていこうと思います。

NEC Aterm WG800HP

OpenWrtに2台目のNEC機が加わりました。
NECのサイトでWG2600HPx以外にLinux機が無いものか探していたところ見つけた機種です。公開されているGPLソースコードにはLinuxのコードが含まれていなかったものの、アップデート用ファームを調べたところOpenWrtベースである様だったので、サポート作業して投げ込みました。まとめます。

仕様

以前投げ込んだWRC-300GHBK2-Iと同じ、QCA9563を搭載しています。2.4Gの無線にはSoC内蔵の無線機能を、5GにはQCA9887を使用。法律の関係上、どちらも使用は非推奨です。

  • SoC: Qualcomm Atheros QCA9563 (750MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB (M14D5121632A)
  • Flash: SPI-NOR 8MB
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x3 (QCA8337)
  • UART: 115200bps(SoC側からVcc, GND, NC, TX, RX)

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

OpenWrt化

Kernel + Rootfsにxorが施され、そこにヘッダ、末尾に10進数のKernel + Rootfsサイズが付加されるのみであったため、factoryファームを作ることができました。

  • WG800HPを起動
    WG800HPに電源ケーブルを接続し、普通に起動。
  • WebUIにアクセス
    http://192.168.10.1/ を開き、ファームウェア更新ページへアクセス。
  • ファーム更新
    WG800HPのfactoryファームを選択し、アップデートを実行
  • 完了
    Flashへの書き込みが完了し、OpenWrtで起動してくる。

備考

  • NEC機としては珍しくOpenWrtベースなこともあってか、率直な構成。Kernel + Rootfsの領域を "firmware" として二重に定義されており、ファームウェアの更新時にはここを丸ごと書き換える挙動。
    • factoryファームによりOpenWrtを投入した際、メーカーファームでの設定が一部引き継がれてしまっていることがあったような気もする。その場合resetボタンによりリセット可。
  • WG800HPが搭載する一部のLEDは、当初どうやっても使用することができなかった。SoCのdtsiを眺めていたところSoCのJTAGを無効化する(=該当ピンをGPIOとして使用できるようにする)設定があり、使用してみたところエラーを吐いて有効にできず。どうもdtsに記述されるレジスタ範囲に誤りがあり、JTAGの有効 / 無効を切り替えるレジスタが範囲外になっていた模様。
    size値を修正したところエラーを吐かれずJTAGの無効化ができ、さらには使えなかったLEDが制御できるようになった。
  • NAT周りはNetfilter Flow Offloading使用時に700Mbps前後。
  • 筐体は恐らくWF800HPと共通。
  • 中古では圧倒的にWF800HPの比率が高い。現在でも販売が行われているからだろうか。一方、WG800HPは既に販売終了となっているためかあまり出てこない印象。
  • WF800HPはRealtek SoCと推測。

色々

今回はデバイス自体のコードだけでなく、factoryファームを生成するためにxorイメージ生成ツールにも少し変更を加える必要があった。しかしながらC言語についての知識が非常に乏しいためにPRで突っ込まれてしまい、自分の理解もあまり追いついておらず、解決に時間が掛かりメンテナ氏に非常に迷惑をかけてしまった。申し訳ない。
WG800HP自体については、一般的なルータに比べてEthernetポートが1つ少ない4ポートながら、筐体はとても小さいので扱いやすいかな、と。搭載しているSoCも新し目でまだまだ十分なパワーがあり、好印象。

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ファームがスルッと入るのは良いのだが…。