Howto

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

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

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


目次


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

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


ユーザーランドの変更


ユーザーランドのコンフィギュレーション

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

図1のようにユーザーランドのコンフィギュレーションを行い、 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 にチェックを入れると表示されるので、チェックを入れる
         :

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


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

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

 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  #でコメントアウトする

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


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

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

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


GW-450D Linux用ドライバー

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

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

ドライバファイルの展開

次に、GW-450D Linux用ドライバ gw-450d_driver_linux_v3002.zipunzip コマンドで展開します。 展開後、mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2tar コマンドでホームディレクトリ( /home/atmark ) に展開します。

atmark@atde5:~$ unzip gw-450d_driver_linux_v3002.zip
atmark@atde5:~$ cd gw-450d_driver_linux_v3002/
atmark@atde5:~/gw-450d...$ tar jxf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 -C ~/
atmark@atde5:~/gw-450d...$ cd ~/mt7610u_wifi_sta_v3002_dpo_20130916/

図4 GW-450Dドライバアーカイブの展開


パッチの適用とビルド

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

atmark@atde5:~/mt7610u...$ wget https://download.atmark-techno.com/sample/a800-ieee80211ac/gw-450d/armadillo-8x0-mt7610u_wifi_sta_v3002_dpo_20130916.patch
atmark@atde5:~/mt7610u...$ patch -p0 < armadillo-8x0-mt7610u_wifi_sta_v3002_dpo_20130916.patch
patching file Makefile
patching file RT2870STA.dat
patching file common/rtmp_init.c
patching file common/rtusb_dev_id.c
patching file include/rtmp_comm.h
patching file os/linux/config.mk
atmark@atde5:~/mt7610u...$ make KSRC=~/atmark-dist/linux-3.x
 :
atmark@atde5:~/mt7610u...$ ls mt7610u_sta.ko
mt7610u_sta.ko

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


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


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


次にGW-450のコンフィギュレーションファイル RT2870STA.dat をユーザーランドに組み込みます。

atmark@atde5:~/mt7610u...$ cp mt7610u_sta.ko ~/atmark-dist/romfs/lib/modules/3.4-at9/
atmark@atde5:~/mt7610u...$ mkdir -p ~/atmark-dist/romfs/etc/Wireless/RT2870STA
atmark@atde5:~/mt7610u...$ cp RT2870STA.dat ~/atmark-dist/romfs/etc/Wireless/RT2870STA/

図6 GW-450Dカーネルモジュール、コンフィギュレーションファイルのコピー


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

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

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

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


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

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

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

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


GW-450Dの動作確認

Armadilloの設定

GW-450Dを動作させるには、Armadilloを保守モードで起動し、setenv コマンドで、 coherent_pool を指定する必要があります。

Hermit> setenv console=ttySC2,115200 coherent_pool=1M mem=384M

図9 Hermitでの coherent_pool の設定


Armadilloの起動

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

[root@armadillo810-0 (ttySC2) ~]# ifconfig ra0
ra0       Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

図10 Armadillo起動時の ra0 の状態


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

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

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

DHCPで運用する場合

iface ra0 inet dhcp

固定IPで運用する場合

iface ra0 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)用に設定します。設定は図12を参考にしてください。 編集が完了したら、 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 ra0 -c /etc/config/wpa_supplicant.conf -Dwext -B

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


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

[root@armadillo810-0 (ttySC2) ~]# iwconfig ra0
ra0       Ralink STA  ESSID:"wpa-ap"  Nickname:"MT7610U_STA"
          Mode:Managed  Frequency=5.22 GHz  Access Point: xx:xx:xx:xx:xx:xx
          Bit Rate=135 Mb/s
          RTS thr:off   Fragment thr:off
          Encryption key:****-****-****-****-****-****-****-****   Security mode:open
          Link Quality=100/100  Signal level:-25 dBm  Noise level:-60 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

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


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

[root@armadillo810-0 (ttySC2) /etc/config]# ifup ra0
ip: RTNETLINK answers: File exists
[root@armadillo810-0 (ttySC2) ~]# ifconfig ra0
ra0       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:3029 errors:0 dropped:193 overruns:0 frame:0
          TX packets:130 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:764710 (746.7 KiB)  TX bytes:15274 (14.9 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-v1.08.bin.gz
Armadillo-810用 ユーザーランドイメージ romfs-a810-GW-450D.img.gz
表4 Armadillo-840 動作確認イメージ
Armadillo-840用 Linuxカーネルイメージ linux-a840-v1.05.bin.gz
Armadillo-840用 ユーザーランドイメージ romfs-a840-GW-450D.img.gz
表5 GW-450D Linuxドライバ Armadillo-810/840用パッチ
gw-450d_driver_linux_v3002.zip 用 パッチファイル

スループット計測結果

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

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

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

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

 #================
 #PLANEX GW-450D
 #================
 DEV_NAME=ra0

 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に追記する内容