本解説では、MediaTek(旧Ralink Technology)社製チップを搭載したUSB無線LANアダプタを Linux 3.x系カーネル搭載のArmadilloで使用する方法を説明します。
目次
動作確認は表1の環境で行いました。
ATDE5 | amd64 v20151026 |
---|---|
Linuxカーネル | linux-3.4-at16 (Armadillo-810/840) |
linux-3.14-at4 (Armadillo-420) | |
ユーザーランド (Atmark Dist) | atmark-dist-20151026 |
Linuxカーネルの変更
MediaTek(旧Ralink Technology)社製チップのドライバーをビルドするには、Linuxカーネルで Linux 802.11 configuration API がサポートされている必要があります。デフォルトでは、本機能は無効になっている為、 Linuxカーネルコンフィギュレーションで有効にします。
図1のようにLinuxカーネルコンフィギュレーションを行い、当該機能を有効化してください。
[*] Networking support --->
-*- Wireless --->
<*> cfg80211 - wireless configuration API #チェックを入れる
: 一部省略
[*] cfg80211 wireless extensions compatibility #チェックを入れる(3.14のみ、3.4はデフォルトで有効)
<*> Generic IEEE 802.11 Networking Stack (mac80211) #チェックを入れる
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> Ralink driver support ---> #チェックを入れる
<*> Ralink rt27xx/rt28xx/rt30xx (USB) support #チェックを入れる
[*] rt2800usb - Include support for rt33xx devices #チェックを入れる
[*] rt2800usb - Include support for rt35xx devices (EXPERIMENTAL) #チェックを入れる
[*] rt2800usb - Include support for rt3573 devices (EXPERIMENTAL) #チェックを入れる(3.14のみ)
[*] rt2800usb - Include support for rt53xx devices (EXPERIMENTAL) #チェックを入れる
[*] rt2800usb - Include support for rt55xx devices (EXPERIMENTAL) #チェックを入れる(3.14のみ)
[*] rt2800usb - Include support for unknown (USB) devices #チェックを入れる
図1 Linux 802.11 configuration API を有効化
また、 (EXPERIMENTAL) と付いているドライバについては、動作が不安定な可能性があります。
ユーザーランドの変更
無線LANアクセスポイントに接続する方法は色々ありますが、今回は atmark-dist-20151026 に含まれている
wpa_supplicant
を使います。
図2のようにユーザーランドのコンフィギュレーションを行い、 wpa_supplicant
を有効化してください。
Userland Configuration
Network Applications --->
:
--- Wireless-tools
:
[*] hostap #チェックを入れる
[ ] hostap driver (Prism2/2.5/3) (NEW)
[ ] hostapd (NEW)
[*] wpa_supplicant (NEW) #hostap にチェックを入れると表示されるので、チェックを入れる
:
図2 wpa_supplicant を組み込む為のユーザーランドコンフィギュレーション
VID、PIDの追加
atmark-dist内の、 linux-3.x/drivers/net/wireless/rt2x00/rt2800usb.c
にある構造体 usb_device_id rt2800usb_device_table[]
に、
お使いのUSB無線LANアダプタのVIDとPIDを追加します。お使いのUSB無線LANアダプタのVIDとPIDは、lsusb
コマンドを用いて調べることが出来ます。
既にusb_device_id rt2800usb_device_table[]
の中に、お使いのUSB無線LANアダプタのVIDとPIDが記述されている場合は、この作業は不要です。
ここでは例として、PLANEX社の GW-USMicroN をATDEに接続し、lsusb
コマンドでVIDとPIDを確認しています。
atmark@atde5:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 002: ID 2019:ed14 PLANEX GW-USMicroN #VID=2019、PID=ed14
図3 lsusbコマンドによるVIDとPIDの確認
/*
* rt2800usb module information.
*/
struct usb_device_id rt2800usb_device_table[] = {
{ USB_DEVICE(0x2019, 0xed14) }, #この行をVID、PIDに合わせて追加
図4 GW-USMicroNのVID、PIDの追加
wpa_supplicant コンフィグファイルの修正
この段階でユーザーランドのビルドを行うと、wpa_supplicant
がビルドエラーになります。
ビルドエラーを回避するために atmark-dist/user/hostap/wpa_supplicant/.config
を図5のように修正してください。
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 #でコメントアウトする
図5 wpa_supplicant/.config (53,55行目) の修正
以上の設定が終わったら、Linuxカーネル/ユーザーランドのビルドを行ってください。
atmark@atde5:~/atmark-dist$ make clean
atmark@atde5:~/atmark-dist$ make
図6 Linuxカーネル/ユーザーランドのビルド
Ralink Technology社製チップのLinux用ファームウェアの追加
ファームウェアの展開
Ralink Technology社製チップのLinux用ファームウェアは、Debianのリポジトリからダウンロードすることができます。2015年11月9日時点ではv0.43がDebian jessie(stable)で使われています。
firmware-ralink_0.43_all.deb
をATDE5内にダウンロードし、atmark-dist内のromfsディレクトリに展開してください。
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-ralink_0.43_all.deb
atmark@atde5:~$ dpkg-deb -x firmware-ralink_0.43_all.deb ~/atmark-dist/romfs/
図7 Ralink Technology社製チップのファームウェアの展開
Linuxカーネルとユーザーランドの作成
以上の設定が終わったらLinuxカーネルとユーザーランドのイメージを作成してください。
atmark@atde5:~$ cd ~/atmark-dist
atmark@atde5:~/atmark-dist$ make image
図8 Linuxカーネル/ユーザーランドのイメージ作成
USB無線LANアダプタの動作確認
Armadilloの起動
ここではArmadillo-420を用いてUSB無線LANアダプタの動作確認を行います。 Armadillo-420にUSB無線LANアダプタを接続し、上述した手順でビルドしたカーネルおよびユーザーランドで起動します。 起動後に iwconfig
コマンドを実行すると、ネットワークインターフェース wlan0
が確認できます。
[root@armadillo420-0 (ttymxc1) ~]# iwconfig
wlan0 IEEE 802.11bgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
図9 Armadillo起動時の wlan0 の状態
ネットワークインターフェースの設定
ここではDHCPと、固定IPで運用する場合の設定方法を説明します。
ネットワークインターフェースの設定は /etc/config/interfaces
の内容を変更することで行います。
内容を変更後は、 変更内容をフラッシュメモリに保存してください。
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
変更内容をフラッシュメモリに保存
[root@armadillo420-0 (ttymxc1) ~]# flatfsd -s
無線LANアクセスポイントへの接続
ここでは wpa_supplicant
を使用して、無線LANアクセスポイントへ接続する手順を説明します。
今回、無線LANアクセスポイントには NEC PA-WR8700N を用いました。 無線LANアクセスポイントは表2のように設定し、確認を行いました。設定値はお使いの環境に合わせて適宜読み替えてください。
項目 | 設定値 |
---|---|
セキュリティ設定 | WPA2-PSK |
SSID | wpa-ap |
パスフレーズ | 0123456789ABC |
まず wpa_passphare
コマンドを用いて、無線LANアクセスポイントへ接続する為の設定ファイルを作成します。
[root@armadillo420-0 (ttymxc1) ~]# wpa_passphrase wpa-ap 0123456789ABC > /etc/config/wpa_supplicant.conf
図10 wpa_supplicant.confの生成
次に /etc/config/wpa_supplicant.conf
を vi
などのエディタで編集し WPA2-PSK(AES)用に設定します。設定は図11を参考にしてください。
編集が完了したら、 wpa_supplicant.conf
をフラッシュメモリに書き込んでください。
network={
ssid="wpa-ap"
#psk="0123456789ABC" # この行は削除します
psk=a1ba49620e3388a650e42568fe1b5f198fe611ba239d826d7f34447900723796
proto=RSN # 追加する
key_mgmt=WPA-PSK # 追加する
pairwise=CCMP # 追加する
group=CCMP # 追加する
}
図11 wpa_supplicant.confの設定例
次に、wpa_supplicant
を実行し、無線LANアクセスポイントへ接続します。
[root@armadillo420-0 (ttymxc1) ~]# wpa_supplicant -i wlan0 -c /etc/config/wpa_supplicant.conf -Dwext -B
図12 wpa_supplicant による無線LANアクセスポイントへの接続コマンド
無線LANアクセスポイントへの接続が成功すると、iwconfig wlan0
コマンドで以下の結果が確認できます。
[root@armadillo420-0 (ttymxc1) ~]# iwconfig wlan0
wlan0 IEEE 802.11bgn ESSID:"wpa-ap"
Mode:Managed Frequency:2.472 GHz Access Point: xx:xx:xx:xx:xx:xx
Bit Rate=6.5 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
Link Quality=70/70 Signal level=-29 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
図13 無線LANアクセスポイントへ接続後の wlan0 の状態
次に、ifup
コマンドでネットワークの設定を反映させます。
[root@armadillo420-0 (ttymxc1) /etc/config]# ifup wlan0
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
[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)
図14 ネットワーク設定の反映
有線LANポートや、USBハブ経由で有線LANアダプタを用いてネットワークに接続している場合、通信が正常に行われない場合があります。その為、ifconfig
コマンドで eth0
を無効にします。
[root@armadillo420-0 (ttymxc1) ~]# ifconfig eth0 down
図15 有線LANポート(eth0)の無効化
スループット計測結果
今回使用した環境で、NPtcpを用いてスループットを測定した結果、Armadillo-420(linux-3.14-at4)は約8Mbps、Armadillo-840(linux-3.4-at16)は約24Mbpsのスループットが確認できました。
linux-3.14-at4で iwconfig を使って通信速度をautoから固定に設定すると、Warningが発生し正しく通信できない場合があります。 原因については現在調査中です。
ieee80211 phy0: rt2800usb_txdone: Warning - Got TX status for an empty queue 2, dropping