大破ログ

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

NEC Aterm WG1200CR

WG1200CR内部

OpenWrtのAtermに3機種目が加わりました。今回は、コンパクトなこの機種です。
某氏より提供頂き、知識不足等から少々時間が掛かりましたがサポート作業を進めてマージされました。
まとめます。

仕様

既にサポートされているWG800HPと同様、QCA9563を搭載しています。
有線のポート数が2ポートしかない為、switchチップはわずかに異なるものを搭載しています。無線に2.4GHz帯はSoC内蔵の無線機能を、5GHz帯はPCIeで接続されるチップを利用することはWG800HPと同様ですが、MIMOが異なることはもちろんのこと、最新の機種故かWave2対応のQCA9888を搭載しています。
ただし、いずれの無線機能もOpenWrtでの使用は法律の関係上非推奨です

  • SoC: Qualcomm Atheros QCA9563(750MHz, 1C1T)
  • RAM: DDR2 SDRAM 128MB (Winbond W971GG6SB-25)
  • Flash: SPI Flash 8MB (Macronix MX25L6433F)
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x1 (QCA8334)
  • UART: 115200bps(電源コネクタ側からVcc, GND, NC, TX, RX)

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

OpenWrt化

メーカーファームから投入できるファームウェアの形式の特定その他に時間が掛かってしまったものの、factoryを用意できた為簡単にインストールすることができます。
2020/04/13 追記: 2020/02/19に公開されたWG1200CRファームウェア1.3.3より、ファームウェアの投げ込みによる手動更新が廃止されオンラインアップデートのみとなりました。1.3.3からそれ以前のバージョンにダウングレードすることもできません。このため、当該バージョンからはこの方法を用いてOpenWrtのインストールを行うことはできません。

WG1200CRを起動
WG1200CRに電源ケーブルを繋ぎ、普通に起動。
WebUIにアクセス
PCとWG1200CRをLANケーブルで接続し、 http://192.168.10.1/にアクセスしてファームウェア更新ページへ移動する
ファーム更新
WG1200CR用のfactoryファームを選択し、アップデートを実行
完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動してくる

既知の問題

"POWER" 以外のLEDが使用できない
WG1200CRでは、搭載するLEDの個数が多すぎるため、"POWER" に存在する緑/赤のLED以外は全て5GHz帯用に搭載されているQCA9888に接続されています。
今回のPRに対応して頂いた方によると、以前はath10k系列チップにおけるGPIOコントロールは実装が存在したものの、既に削除されており現在は利用できないとのこと。
このため、再度実装が追加されない限り、これらのLEDは使用できません。

作業時あれこれ

  • いつも通りGPIOに接続されているLEDを探していたところ、"POWER" に存在する緑/赤の2つは難なく見つかったものの、他のLEDは全く見つからず。基板を確認したところこれらのLEDはいずれもSoC (QCA9563)ではなくQCA9888の方へパターンが伸びており、またLEDのコントロールに使用すると思しきコマンドをバイナリエディタで見てみると "POWER" 以外のLEDはiwprivコマンドを介して制御していると思われる記述があり、QCA9888に接続されているものと判断した。
    ath9kではSoCのGPIOを制御する方法が提供されているがath10kでは見た記憶が無く、探してみても見つからないので "既知の問題" としてPRを出したところ、前述の通り「実装が削除されている」というコメントを頂いた。かなしい。
  • 今回も、他のAterm機と同様にU-BootとKernelの両方にパスワードが掛けられていた。
    U-Bootは機種毎に異なる文字列(WG2600HPやWR8750N等で使用されていた固定のものとは別)、KernelはMACアドレスと機種名、それと機種固有の何らかの値を基に生成するらしく、個体毎に異なるものと推測される。
    WG800HPではファームウェアがOpenWrtベース故にfailsafeモードが存在しており、ここから内部のパスワード生成プログラムを実行することでKernelのパスワードを取得できた。しかしWG1200CRではOpenWrtベースと思われるもののfailsafeが存在しないためにKernelのパスワードを得られず、結局雑記に書いた通りU-Bootのパスワードのみ判明したので、OpenWrtファームを仮組みした状態から詰めていった。
  • 前述の通り、U-Bootにパスワードが掛けられていることもあり、factoryファームを用意して簡単にインストールできることを目指した。
    しかしながら、メーカーファームからインストールできるファームウェアの形式の特定に時間が掛かった。
    バイナリエディタで見てみると、末尾付近は一定の文字列の繰り返しの様な状態になっており、xorであることを推測。しかしながら決まった文字列が繰り返されているのではなく、わずかずつ異なっている。
    メーカーファーム内に存在するデコード用プログラムを調べたところ、不自然に存在する文字列があり、これを使用してxorを掛けたところ、ファームウェア自体は本来の状態にデコードはされなかったが末尾付近に同一な文字列の繰り返しが現れた。
    715ED0  F1F2F3F4 F5F6F7F8 F9FAFB01 02030405  ................
    715EE0  06070809 0A0B0C0D 0E0F1011 12131415  ................
    715EF0  16171819 1A1B1C1D 1E1F2021 22232425  .......... !"#$%
    715F00  26272829 2A2B2C2D 2E2F3031 32333435  &'()*+,-./012345
    715F10  36373839 3A3B3C3D 3E3F4041 42434445  6789:;?@ABCDE
    715F20  46474849 4A4B4C4D 4E4F5051 52535455  FGHIJKLMNOPQRSTU
    715F30  56575859 5A5B5C5D 5E5F6061 62636465  VWXYZ[\]^_`abcde
    715F40  66676869 6A6B6C6D 6E6F7071 72737475  fghijklmnopqrstu
    715F50  76777879 7A7B7C7D 7E7F8081 82838485  vwxyz{|}~.......
    715F60  86878889 8A8B8C8D 8E8F9091 92939495  ................
    715F70  96979899 9A9B9C9D 9E9FA0A1 A2A3A4A5  ................
    715F80  A6A7A8A9 AAABACAD AEAFB0B1 B2B3B4B5  ................
    715F90  B6B7B8B9 BABBBCBD BEBFC0C1 C2C3C4C5  ................
    715FA0  C6C7C8C9 CACBCCCD CECFD0D1 D2D3D4D5  ................
    715FB0  D6D7D8D9 DADBDCDD DEDFE0E1 E2E3E4E5  ................
    715FC0  E6E7E8E9 EAEBECED EEEFF0F1 F2F3F4F5  ................
    715FD0  F6F7F8F9 FAFB0102 03040506 0708090A  ................
    715FE0  0B0C0D0E 0F101112 13141516 1718191A  ................
    715FF0  1B1C1D1E 1F202122 23242526 2728292A  ..... !"#$%&'()*
    716000  2B2C2D2E 2F303132 33343536 3738393A  +,-./0123456789:
    716010  3B3C3D3E 3F404142 43444546 4748494A  ;?@ABCDEFGHIJ
    716020  4B4C4D4E 4F505152 53545556 5758595A  KLMNOPQRSTUVWXYZ
    716030  5B5C5D5E 5F606162 63646566 6768696A  [\]^_`abcdefghij
    716040  6B6C6D6E 6F707172 73747576 7778797A  klmnopqrstuvwxyz
    716050  7B7C7D7E 7F808182 83848586 8788898A  {|}~............
    716060  8B8C8D8E 8F909192 93949596 9798999A  ................
    716070  9B9C9D9E 9FA0A1A2 A3A4A5A6 A7A8A9AA  ................
    716080  ABACADAE AFB0B1B2 B3B4B5B6 B7B8B9BA  ................
    716090  BBBCBDBE BFC0C1C2                    ........        
    結論としては、エンコード/デコード手法を簡略化して表すと ということだった。 根本としてはxorなのでOpenWrtに既存のxorimage.cを流用してnec-enc.cを作成、このプログラムによりWG1200CRのfactory生成を行えるようにした。
    このnec-encは、今現在以下の機種でファームウェアエンコード/デコードに使用できることを確認済み。
    • WR8165N
    • WR8166N
    • WF300HP2
    • WF800HP
    • WF1200CR
    • WG1200CR
    • WG1200HP
    • WG1900HP
    • WG2600HS
    恐らく、Realtek SoCを搭載する11ac機はほぼ全て利用できると思われる。
    WG2600HPxやWR4100N、モバイルルータのMRxxLNシリーズは異なるフォーマットであるため利用不可。

色々

今回もWG800HPの時と同様、Cのプログラムに絡んでメンテナ氏にいくらか対応して頂いたので、とても感謝。学習していかねば。
"既知の問題" に書いた通りPOWER以外のLEDが使用できないのが残念な点ではあるものの、小型でありながらGbE対応で、なおかつSoCにもある程度パワーがあり、価格もさほど高くないので特化した用途に良いかな、という感じ。
Aterm、搭載LED多すぎて癖のある構成になっている機種が多いのは何なんだろう...無線チップのGPIO利用したり(例: WR8750N, WR9750N)、I2Cエキスパンダを搭載して利用していたり(例: WG1400HP)...。