本解説では、IEEE802.11ac に対応したUSB無線LANアダプタ プラネックス社製 GW-450D 及び、GW-450D KATANAをArmadillo-810/840で使用する方法を説明します。
デバイスの動作確認だけを行いたい場合は、Appendix 動作確認用イメージを用いてArmadilloを起動し、GW-450Dの動作確認へ進んでください。
目次
動作確認は表1の環境で行いました。
ATDE5 | amd64 v20140131 |
---|---|
Linuxカーネル | v3.4-at9 |
ユーザーランド (Atmark Dist) | v20140602 |
ユーザーランドの変更
ユーザーランドのコンフィギュレーション
無線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.zip
を unzip
コマンドで展開します。
展開後、mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
を tar
コマンドでホームディレクトリ( /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カーネル/ユーザーランドのイメージ作成
make
、make romfs
を実行すると、~/atmark-dist/romfs
配下に格納した、
z20-wirelesslan.rules
、mt7610u_sta.ko
、RT2870STA.dat
ファイルは消えてしまいます。make
、make 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の設定で確認を行いました。設定値はお使いの環境に合わせて適宜読み替えてください。
項目 | 設定値 |
---|---|
セキュリティ設定 | 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.conf
を vi
などのエディタで編集し 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です。
Armadillo-810用 Linuxカーネルイメージ | linux-a810-v1.08.bin.gz |
---|---|
Armadillo-810用 ユーザーランドイメージ | romfs-a810-GW-450D.img.gz |
Armadillo-840用 Linuxカーネルイメージ | linux-a840-v1.05.bin.gz |
---|---|
Armadillo-840用 ユーザーランドイメージ | romfs-a840-GW-450D.img.gz |
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に追記する内容