Howto

Armadillo-810/840で IEEE802.11ac USB無線LANアダプタ GW-900D を動作させる

本解説では、IEEE802.11ac に対応したUSB無線LANアダプタ プラネックス社製 GW-900D を Armadillo-810/840で使用する方法を説明します。

デバイスの動作確認だけを行いたい場合は、Appendix 動作確認用イメージを用いてArmadilloを起動し、GW-900Dの動作確認へ進んでください。


目次


動作確認は表1の環境で行いました。

表1 動作確認環境
ATDE5 amd64 v20140131
Linuxカーネル v3.4-at9
ユーザーランド (Atmark Dist) v20140602
本解説では、ATDE5上にLinuxカーネル/ユーザーランドのビルド環境が構築済みであることを前提に説明をしています。 ビルド環境を未構築の場合は、参考情報を基に構築を行ってください。
参考情報
Armadillo-810 製品マニュアル 「11. ビルド手順」
Armadillo-840 製品マニュアル 「11. ビルド手順」


Linuxカーネル/ユーザーランドの変更

Linuxカーネルの変更

GW-900D のドライバーをビルドするには、Linuxカーネルで Linux 802.11 configuration API がサポートされている必要があります。デフォルトでは、本機能は無効になっている為、 Linuxカーネルコンフィギュレーションで有効にします。

図1のようにLinuxカーネルコンフィギュレーションを行い、当該機能を有効化してください。

Linux/arm 3.4-at9 Kernel Configuration
[*] Networking support  --->
    -*-   Wireless  --->
        <*>   cfg80211 - wireless configuration API  #チェックを入れる

図1 Linux 802.11 configuration API を有効化


ユーザーランドの変更

無線LANアクセスポイントに接続する方法は色々ありますが、今回は atmark-distv20140602 に含まれている wpa_supplicant を使います。

図2のようにユーザーランドのコンフィギュレーションを行い、 wpa_supplicant を有効化してください。

atmark-dist v1.34.2 Configuration
    Network Applications  --->
         :
        --- Wireless-tools
         :
        [*] hostap     #チェックを入れる
        [ ]   hostap driver (Prism2/2.5/3) (NEW)
        [ ]   hostapd (NEW)
        [*]   wpa_supplicant (NEW)     #hostap にチェックを入れると表示されるので、チェックを入れる
         :

図2 wpa_supplicant を組み込む為のユーザーランドコンフィギュレーション


wpa_supplicant コンフィグファイルの修正

この段階でユーザーランドのビルドを行うと、wpa_supplicant がビルドエラーになります。 ビルドエラーを回避するために atmark-dist/user/hostap/wpa_supplicant/.config を図3のように修正してください。

 52 # Driver interface for madwifi driver
 53 #CONFIG_DRIVER_MADWIFI=y      #でコメントアウトする
 54 # Change include directories to match with the local setup
 55 #CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/wireless/madwifi  #でコメントアウトする

図3 wpa_supplicant/.config (53,55行目) の修正


以上の設定が終わったら、Linuxカーネル/ユーザーランドのビルドを行ってください。

 atmark@atde5:~/atmark-dist$ make clean
 atmark@atde5:~/atmark-dist$ make

図4 Linuxカーネル/ユーザーランドのビルド


GW-900D Linux用ドライバーのビルド

GW-900D Linux用ドライバファイルのダウンロード

GW-900D Linux用のドライバーは、GW-900Dのダウンロードページ からダウンロードができます。2014年10月21日時点では、2014年3月4日にリリースされた v4.2.5 が最新です。 gw-900d_driver_linux_v425.zip をATDE5内にダウンロードしてください。

ドライバファイルの展開

次に、GW-900D Linux用ドライバ gw-900d_driver_linux_v425.zipunzip コマンドで展開します。
展開後、 RTL8812AU_linux_v4.2.5_10640.20140303.zipunzip コマンドで展開します。
展開後、 driver ディレクトリに含まれる rtl8812AU_linux_v4.2.5_r10640.20140303.tar.gztar コマンドで ホームディレクトリ( /home/atmark )に展開します。

atmark@atde5:~$ unzip gw-900d_driver_linux_v425.zip
atmark@atde5:~$ cd gw-900d_driver_linux_v425
atmark@atde5:~/gw-900d...$ unzip RTL8812AU_linux_v4.2.5_10640.20140303.zip
atmark@atde5:~/gw-900d...$ cd RTL8812AU_linux_v4.2.5_10640.20140303/driver
atmark@atde5:~/gw-900d.../RTL8812AU.../driver$ tar zxf rtl8812AU_linux_v4.2.5_r10640.20140303.tar.gz -C ~/
atmark@atde5:~/gw-900d.../RTL8812AU.../driver$ cd ~/rtl8812AU_linux_v4.2.5_r10640.20140303/

図5 GW-900ドライバアーカイブの展開


パッチの適用とビルド

ドライバーは、そのままでは、Armadillo-810/840用にビルドができないので、 パッチ を適用してからビルドを行います。 パッチの適用方法、ビルド手順は図#を参考にしてください。

atmark@atde5:~/rtl8812AU...$ wget http://download.atmark-techno.com/sample/a800-ieee80211ac/gw-900d/armadillo8x0-rtl8812AU_linux_v4.2.5_10640.20140303.patch
atmark@atde5:~/rtl8812AU...$ patch -p0 < armadillo8x0-rtl8812AU_linux_v4.2.5_10640.20140303.patch
patching file Makefile
patching file include/autoconf.h
atmark@atde5:~/rtl8812AU...$ make KSRC=/home/atmark/atmark-dist/linux-3.x/
 :
atmark@atde5:~/rtl8812AU...$ ls 8812au.ko
8812au.ko

図6 パッチの適用とビルド


make KSRC= の後には、Linuxカーネルソースへのパスを指定します。
パスはお使いの環境に合わせて適宜置き換えてください。


ビルド後に生成される 8812au.ko が GW-900D のカーネルモジュールです。 カーネルモジュールは ~/atmark-dist/romfs/lib/modules/3.4-at9/ へコピーをしてください。 このパスにカーネルモジュールを格納することで、後述する modprobe コマンドにより、カーネルモジュールをロードすることが可能になります。

atmark@atde5:~/rtl8812AU...$ cp 8812au.ko ~/atmark-dist/romfs/lib/modules/3.4-at9/

図7 GW-900Dカーネルモジュールのコピー


udevでカーネルモジュールを自動でロードする設定

Armadillo810/840 に GW-900D が接続された際に、自動でカーネルモジュールをロードする設定を行います。 まず ~/atmark-dist/romfs/etc/udev/rules.d 配下に z20-wirelesslan.rules を格納してください。 このudevルールはArmadillo へ GW-900D が接続された際に、自動で modprobe コマンドを実行して、カーネルモジュールをロードします。

atmark@atde5:~$ cd atmark-dist/romfs/etc/udev/rules.d/
atmark@atde5:~/atmark-dist/../rules.d$ wget http://download.atmark-techno.com/sample/a800-ieee80211ac/gw-900d/z20-wirelesslan.rules
atmark@atde5:~/atmark-dist/../rules.d$ cat z20-wirelesslan.rules
# PLANEX GW-900D
ATTRS{idVendor}=="2019", ATTRS{idProduct}=="ab30", ACTION=="add", RUN+="/usr/sbin/modprobe 8812au"

図8 udevでドライバを自動で組み込む設定


以上の設定が終わったらユーザーランドのイメージを作成してください。

atmark@atde5:~$ cd ~/atmark-dist
atmark@atde5:~/atmark-dist$ make image

図9 Linuxカーネル/ユーザーランドのイメージ作成

makemake romfs を実行すると、~/atmark-dist/romfs 配下に格納した、 z20-wirelesslan.rules8812au.ko ファイルは消えてしまいます。
makemake romfs を実行する度に、これらのファイルは都度コピーをしてください。


GW-900Dの動作確認

Armadilloの起動

ここではArmadillo-810を用いてGW-900Dの動作確認を行います。 Armadillo-810にGW-900Dを接続し、上述した手順でビルドしたカーネルおよびユーザーランドで起動します。 起動後に iwconfig コマンドを実行すると、ネットワークインターフェース wlan0wlan1 が確認できます。

[root@armadillo810-0 (ttySC2) ~]# iwconfig
wlan1     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

wlan0     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

図10 Armadillo起動時の wlan0、wlan1 の状態


ネットワークインターフェースの設定

ここではDHCPと、固定IPで運用する場合の設定方法を説明します。

ネットワークインターフェースの設定は /etc/config/interfaces の内容を変更することで行います。 内容を変更後は、flatfsd -s コマンドを実行して、変更内容をフラッシュメモリに保存してください。

DHCPで運用する場合

iface wlan0 inet dhcp

固定IPで運用する場合

iface wlan0 inet static
  address   192.168.0.2
  netmask   255.255.255.0
  broadcast 192.168.0.255
  gateway   192.168.0.1


無線LANアクセスポイントへの接続

ここでは wpa_supplicant を使用して、無線LANアクセスポイントへ接続する手順を説明します。

今回、無線LANアクセスポイントには NETGEAR R6300 を用いました。 無線LANアクセスポイントは表2の設定で確認を行いました。設定値はお使いの環境に合わせて適宜読み替えてください。

表2 接続先の無線LANアクセスポイント
項目 設定値
セキュリティ設定 WPA2-PSK
SSID wpa-ap
事前共有鍵 0123456789ABC

まず wpa_passphare コマンドを用いて、無線LANアクセスポイントへ接続する為の設定ファイルを作成します。

[root@armadillo810-0 (ttySC2) ~]# wpa_passphrase wpa-ap 0123456789ABC > /etc/config/wpa_supplicant.conf

図11 wpa_supplicant.confの生成


次に /etc/config/wpa_supplicant.confvi などのエディタで編集し WPA2-PSK(AES)用に設定します。設定は図#を参考にしてください。 編集が完了したら、 flatfsd -s コマンドを実行し、wpa_supplicant.conf をフラッシュメモリに書き込んでください。

network={
        ssid="wpa-ap"
        #psk="0123456789ABC"   # この行は削除します
        psk=a1ba49620e3388a650e42568fe1b5f198fe611ba239d826d7f34447900723796
        proto=RSN              # 追加する
        key_mgmt=WPA-PSK       # 追加する
        pairwise=CCMP          # 追加する
        group=CCMP             # 追加する
}

図12 wpa_supplicant.confの設定例


次に、wpa_supplicant を実行し、無線LANアクセスポイントへ接続します。

[root@armadillo810-0 (ttySC2) ~]# wpa_supplicant -i wlan0 -c /etc/config/wpa_supplicant.conf -Dwext -B

図13 wpa_supplicant による無線LANアクセスポイントへの接続コマンド


無線LANアクセスポイントへの接続が成功すると、iwconfig wlan0コマンドで以下の結果が確認できます。

[root@armadillo810-0 (ttySC2) ~]# iwconfig wlan0
wlan0     IEEE 802.11AC  ESSID:"wpa-ap"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:5.22 GHz  Access Point: xx:xx:xx:xx:xx:xx
          Bit Rate:867 Mb/s   Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:****-****-****-****-****-****-****-****   Security mode:open
          Power Management:off
          Link Quality=100/100  Signal level=100/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

図14 無線LANアクセスポイントへ接続後の wlan0 の状態


次に、ifup コマンドでネットワークの設定を反映させます。

[root@armadillo810-0 (ttySC2) /etc/config]# ifup wlan0
ip: RTNETLINK answers: File exists
[root@armadillo810-0 (ttySC2) /etc/config]# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:192.168.0.2  Bcast:192.168.255.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1741 errors:0 dropped:563 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:285362 (278.6 KiB)  TX bytes:5676 (5.5 KiB)

図15 ネットワーク設定の反映


Armadillo-840の有線LANポートを用いて、ネットワークに接続している場合、通信が正常に行われない場合があります。その為、ifconfig コマンドで eth0 を無効にします。 Armadillo-810の場合は、標準では有線LANポートが搭載されていない為、本作業は不要です。

[root@armadillo840-0 (ttySC2) ~]# ifconfig eth0 down

図16 有線LANポート(eth0)の無効化


Appendix

動作確認用イメージファイル

動作確認で使用したイメージ、パッチは表3、表4、表5です。

表3 Armadillo-810 動作確認イメージ
Armadillo-810用 Linuxカーネルイメージ linux-a810-at9-GW-900D.bin.gz
Armadillo-810用 ユーザーランドイメージ romfs-a810-GW-900D.img.gz
表4 Armadillo-840 動作確認イメージ
Armadillo-840用 Linuxカーネルイメージ linux-a840-at9-GW-900D.bin.gz
Armadillo-840用 ユーザーランドイメージ romfs-a840-GW-900D.img.gz
表5 GW-900D Linuxドライバ Armadillo-810/840用パッチ
gw-900d_driver_linux_v425.zip 用 パッチファイル

スループット計測結果

参考情報としまして、無線LANアクセスポイントから1mほど離した状態で、Armadillo-840へftp接続を行い、 10MBのテストデータを送受信してみましたところ 約90Mbps程のスループットが確認できました。

Armadillo起動時に自動で無線LANアクセスポイントへ接続する

Armadillo起動時に自動で無線LANアクセスポイントへ接続する方法、色々な実現方法がありますが、 ここでは rc.local で実現をする方法を紹介します。

/etc/configi/rc.local に以下のスクリプトを追記します。

 #================
 #PLANEX GW-900D
 #================
 DEV_NAME=wlan0

 if [ -r /sys/class/net/${DEV_NAME} ]; then
        wpa_supplicant -Dwext -i${DEV_NAME} -c /etc/config/wpa_supplicant.conf -B
        sleep 10
        ifup ${DEV_NAME}
 fi

図17 rc.localに追記する内容