大破ログ

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

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としてならばしっかり出るのでその方向も良いかなとか。