本解説では、IEEE802.11ac に対応したUSB無線LANアダプタ プラネックス社製 GW-450S を Armadillo-810/840で使用する方法を説明します。
デバイスの動作確認だけを行いたい場合は、Appendix 動作確認用イメージを用いてArmadilloを起動し、GW-450Sの動作確認へ進んでください。
目次
動作確認は表1の環境で行いました。
ATDE5 | amd64 v20140131 |
---|---|
Linuxカーネル | v3.4-at9 |
ユーザーランド (Atmark Dist) | v20140602 |
Linuxカーネル/ユーザーランドの変更
Linuxカーネルの変更
GW-450S のドライバーをビルドするには、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-450S Linux用ドライバーのビルド
GW-450S Linux用ドライバファイルのダウンロード
GW-450S Linux用のドライバーは、GW-450Sのダウンロードページ
からダウンロードができます。2014年10月21日時点では、2014年4月3日にリリースされた v4.2.4 が最新です。
gw-450s_driver_linux_v424.zip
をATDE5内にダウンロードしてください。
ドライバファイルの展開
次に、GW-450S Linux用ドライバ gw-450s_driver_linux_v424.zip
を unzip
コマンドで展開します。
展開後、 RTL8811AU_linux_v4.2.4_9533.20131209.zip
を unzip
コマンドで展開します。
展開後、 driver
ディレクトリに含まれる rtl8811AU_linux_v4.2.4_9533.20131209.tar.gz
を tar
コマンドで
ホームディレクトリ( /home/atmark
)に展開します。
atmark@atde5:~$ unzip gw-450s_driver_linux_v424.zip
atmark@atde5:~$ cd gw-450s_driver_linux_v424
atmark@atde5:~/gw-450s...$ unzip RTL8811AU_linux_v4.2.4_9533.20131209.zip
atmark@atde5:~/gw-450s...$ cd RTL8811AU_linux_v4.2.4_9533.20131209/driver
atmark@atde5:~/gw-450s.../RTL8811AU.../driver$ tar zxf rtl8811AU_linux_v4.2.4_9533.20131209.tar.gz -C ~/
atmark@atde5:~/gw-450s.../RTL8811AU.../driver$ cd ~/rtl8811AU_linux_v4.2.4_9533.20131209
図5 GW-450Sドライバアーカイブの展開
パッチの適用とビルド
ドライバーは、そのままでは、Armadillo-810/840用にビルドができないので、 パッチ を適用してからビルドを行います。 パッチの適用方法、ビルド手順は図6を参考にしてください。
atmark@atde5:~/rtl8811AU...$ wget http://download.atmark-techno.com/sample/a800-ieee80211ac/gw-450s/armadillo-8x0-rtl8811AU_linux_v4.2.4_9533.20131209.patch
atmark@atde5:~/rtl8811AU...$ patch -p0 < armadillo-8x0-rtl8811AU_linux_v4.2.4_9533.20131209.patch
patching file Makefile
patching file include/autoconf.h
atmark@atde5:~/rtl8811AU...$ make KSRC=/home/atmark/atmark-dist/linux-3.x/
:
atmark@atde5:~/rtl8811AU...$ ls 8821au.ko
8821au.ko
図6 パッチの適用とビルド
make KSRC=
の後には、Linuxカーネルソースへのパスを指定します。パスはお使いの環境に合わせて適宜置き換えてください。
ビルド後に生成される 8821au.ko
が GW-450S のカーネルモジュールです。
カーネルモジュールは ~/atmark-dist/romfs/lib/modules/3.4-at9/
へコピーをしてください。
このパスにカーネルモジュールを格納することで、後述する modprobe
コマンドにより、カーネルモジュールをロードすることが可能になります。
atmark@atde5:~/rtl8811AU...$ cp 8821au.ko ~/atmark-dist/romfs/lib/modules/3.4-at9/
図7 GW-450Sカーネルモジュールのコピー
udevでカーネルモジュールを自動でロードする設定
Armadillo810/840 に GW-450S が接続された際に、自動でカーネルモジュールをロードする設定を行います。
まず ~/atmark-dist/romfs/etc/udev/rules.d
配下に
z20-wirelesslan.rules
を格納してください。
このudevルールはArmadillo へ GW-450S が接続された際に、自動で 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-450s/z20-wirelesslan.rules
atmark@atde5:~/atmark-dist/../rules.d$ cat z20-wirelesslan.rules
# PLANEX GW-450S
ATTRS{idVendor}=="2019", ATTRS{idProduct}=="ab32", ACTION=="add", RUN+="/sbin/modprobe 8821au"
図8 udevでドライバを自動で組み込む設定
以上の設定が終わったらユーザーランドのイメージを作成してください。
atmark@atde5:~$ cd ~/atmark-dist
atmark@atde5:~/atmark-dist$ make image
図9 Linuxカーネル/ユーザーランドのイメージ作成
make
、make romfs
を実行すると、~/atmark-dist/romfs
配下に格納した、
z20-wirelesslan.rules
、8821au.ko
ファイルは消えてしまいます。make
、make romfs
を実行する度に、これらのファイルは都度コピーをしてください。
GW-450Sの動作確認
Armadilloの起動
ここではArmadillo-840を用いてGW-450Sの動作確認を行います。
Armadillo-840にGW-450Sを接続し、上述した手順でビルドしたカーネルおよびユーザーランドで起動します。
起動後に iwconfig
コマンドを実行すると、ネットワークインターフェース wlan0
が確認できます。
[root@armadillo840-0 (ttySC2) ~]# iwconfig wlan0
wlan0 unassociated Nickname:"<WIFI@REALTEK>"
Mode:Auto 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の設定で確認を行いました。設定値はお使いの環境に合わせて適宜読み替えてください。
項目 | 設定値 |
---|---|
セキュリティ設定 | WPA2-PSK |
SSID | wpa-ap |
事前共有鍵 | 0123456789ABC |
まず wpa_passphare
コマンドを用いて、無線LANアクセスポイントへ接続する為の設定ファイルを作成します。
[root@armadillo840-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@armadillo840-0 (ttySC2) ~]# wpa_supplicant -i wlan0 -c /etc/config/wpa_supplicant.conf -Dwext -B
図13 wpa_supplicant による無線LANアクセスポイントへの接続コマンド
無線LANアクセスポイントへの接続が成功すると、iwconfig wlan0
コマンドで以下の結果が確認できます。
[root@armadillo840-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:434 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@armadillo840-0 (ttySC2) /etc/config]# ifup wlan0
ip: RTNETLINK answers: File exists
[root@armadillo840-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です。
Armadillo-810用 Linuxカーネルイメージ | linux-a810-at9-GW-450S.bin.gz |
---|---|
Armadillo-810用 ユーザーランドイメージ | romfs-a810-GW-450S.img.gz |
Armadillo-840用 Linuxカーネルイメージ | linux-a840-at9-GW-450S.bin.gz |
---|---|
Armadillo-840用 ユーザーランドイメージ | romfs-a840-GW-450S.img.gz |
gw-450s_driver_linux_v424.zip 用 | パッチファイル |
---|
スループット計測結果
参考情報としまして、無線LANアクセスポイントから1mほど離した状態で、Armadillo-840へftp接続を行い、 10MBのテストデータを送受信してみましたところ 約90Mbps程のスループットが確認できました。
Armadillo起動時に自動で無線LANアクセスポイントへ接続する
Armadillo起動時に自動で無線LANアクセスポイントへ接続する方法、色々な実現方法がありますが、 ここでは rc.local で実現をする方法を紹介します。
/etc/configi/rc.local
に以下のスクリプトを追記します。
#================
#PLANEX GW-450S
#================
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に追記する内容