Armadillo
Armadillo-Box WS1/BLE Gateway

Wifi 対応

Howto : Armadillo-810/840で IEEE802.11ac USB無線LANアダプタ GW-900D を動作させる
http://armadillo.atmark-techno.com/howto/a800-ieee80211ac-gw-900d

Linux 3.xでMediaTek(旧Ralink Technology)社製チップ搭載USB無線LANアダプタを動作させる
http://armadillo.atmark-techno.com/howto/wlan-usb-config-rt2x00
を参考に Armadillo-Box WS1 で Buffalo WI-U2-433DM を使用できるようにします。

11ac 対応 USB 無線 LAN 子機 Buffalo WI-U2-433DM

カーネルのカスタマイズ

Buffalo WI-U2-433DM に使われている Realtek rtl8812au 用の driver をビルドするには、
Linuxカーネルで Linux 802.11 configuration API がサポートされている必要があります。
Armadillo-Box WS1 はデフォルトではこの機能は無効に設定されているので
Linuxカーネルコンフィギュレーションで有効にします。

make menuconfig で vendor/Product を指定します。

(AtmarkTechno) Vendor
(Armadillo-Box WS1) AtmarkTechno Products

カーネルコンフィギュレーションで cfg80211 を有効にします。

Linux Kernel Configuration 
[*] Networking support  --->
    -*-   Wireless  --->
        <*>   cfg80211 - wireless configuration API               <-- チェックをいれ有効にする
         : 一部省略
        [*]     cfg80211 wireless extensions compatibility        <-- チェックをいれ有効にする
        <*>   Generic IEEE 802.11 Networking Stack (mac80211)     <-- チェックをいれ有効にする  

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

driver をビルドして有効にしただけでは無線LANアクセスポイントに接続できません。
接続のためのツールをユーザーランドに含めておく必要があります。
暗号化ありのアクセスポイントに接続するためには iw コマンドか wpa_supplicant が必要です。
atmark dist に用意されている wpa_supplicant を追加します。

[*] Customize Vendor/User Settings
    Network Applications  ---> 
         :
        --- Wireless-tools
         :
        [*] hostap     <-- チェックをいれ有効にする
        [ ]   hostap driver (Prism2/2.5/3) (NEW)
        [ ]   hostapd (NEW)
        [*]   wpa_supplicant (NEW)     <-- hostap にチェックをいれると表示されるので、チェックをいれ有効にする
         :

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

このままビルドを行うと wpa_supplicant のビルドはエラーになります。
wpa_supplicant のビルド設定のコンフィグファイル
atmark-dist/user/hostap/wpa_supplicant/.config
を修正し、madwifi interface のビルドを行わないようコメントアウト(=無効化)します。

--- .config.orig	2015-11-27 17:50:49.449674569 +0900
+++ .config	2015-11-27 17:51:03.869675088 +0900
@@ -50,9 +50,9 @@
 #CFLAGS += -I../../include/wireless
 
 # Driver interface for madwifi driver
-CONFIG_DRIVER_MADWIFI=y
+#CONFIG_DRIVER_MADWIFI=y
 # Change include directories to match with the local setup
-CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/wireless/madwifi
+#CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/wireless/madwifi
 
 # Driver interface for Prism54 driver
 # (Note: Prism54 is not yet supported, i.e., this will not work as-is and is

カーネルとユーザーランドのビルド

上記の変更を反映したカーネルとユーザーランドを一旦ビルドします。

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

USB Wifi driver のビルド

Buffalo WI-U2-433DM に使われている Realtek rtl8812au 用の driver を
https://github.com/gnab/rtl8812au
から git clone してビルドします。

ます git clone し、

atmark@atde5:~$ git clone https://github.com/gnab/rtl8812au.git
atmark@atde5:~$ cd rtl8812au

Armadillo-Box 向けにクロスコンパイルするため以下のように Makefile を修正します。
default では PC 向けになっている設定を n にして
Armadillo-Box WS1 向けの ARM クロスコンパイルの設定を追加しています。

diff --git a/Makefile b/Makefile
index b79a7d8..d15cf69 100644
--- a/Makefile
+++ b/Makefile
@@ -49,13 +49,14 @@ CONFIG_EXT_CLK = n
 CONFIG_FTP_PROTECT = n
 CONFIG_WOWLAN = n

-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_I386_PC = n
 CONFIG_PLATFORM_ANDROID_X86 = n
 CONFIG_PLATFORM_JB_X86 = n
 CONFIG_PLATFORM_ARM_S3C2K4 = n
 CONFIG_PLATFORM_ARM_PXA2XX = n
 CONFIG_PLATFORM_ARM_S3C6K4 = n
 CONFIG_PLATFORM_ARM_RPI = n
+CONFIG_PLATFORM_ARM_ARMADILLO_CROSS = y
 CONFIG_PLATFORM_MIPS_RMI = n
 CONFIG_PLATFORM_RTD2880B = n
 CONFIG_PLATFORM_MIPS_AR9132 = n
@@ -738,6 +739,15 @@ KSRC ?= /lib/modules/$(KVER)/build
 MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
 endif

+ifeq ($(CONFIG_PLATFORM_ARM_ARMADILLO_CROSS), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+ARCH := arm
+CROSS_COMPILE := arm-linux-gnueabi-
+KVER  := 3.14.36-at4
+KSRC ?= /home/atmark/linux-3.14-at4
+MODDESTDIR :=
+endif
+
 ifeq ($(CONFIG_PLATFORM_RTD2880B), y)
 EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN -DCONFIG_PLATFORM_RTD2880B
 ARCH:=

これで make します。

atmark@atde5:~/rtl8812au$ make
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C /home/atmark/linux-3.14-at4 M=/home/atmark/test_work/rtl8812au  modules
make[1]: ディレクトリ `/home/atmark/linux-3.14-at4' に入ります
  CC [M]  /home/atmark/rtl8812au/core/rtw_cmd.o
  CC [M]  /home/atmark/rtl8812au/core/rtw_security.o
〜〜 中略 〜〜
  CC [M]  /home/atmark/rtl8812au/core/rtw_mp_ioctl.o
  LD [M]  /home/atmark/rtl8812au/8812au.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/atmark/rtl8812au/8812au.mod.o
  LD [M]  /home/atmark/rtl8812au/8812au.ko
make[1]: ディレクトリ `/home/atmark/linux-3.14-at4' から出ます

出来上がった 8812au.ko を ROM イメージディレクトリに配置します。

atmark@atde5:~/rtl8812au$ cp 8812au.ko ~/atmark-dist/romfs/lib/modules/3.14.36-at4/kernel/

ROM イメージディレクトリのカーネルモジュール PATH 以下に配置すると、
make image の際に depmod が実行され
modprobe 8812au でロードできるようになります。

イメージ再作成

ビルドしたドライバーを含むよう、再度イメージを作成します。

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

atmark-dist/images/ の下のファイルが更新されていることを確認します。

動作確認

Armadillo-Box WS1 がネットワークに接続してある場合に一番速い書き換え方法である
12.4. TFTPを使用してフラッシュメモリを書き換える
http://manual.atmark-techno.com/armadillo-box-ws1/armadillo-box-ws1_product_manual_ja-1.0.0/ch12.html#sct.update_image-with-tftpdl
でカーネルとユーザーランドを再作成したものに書き換えます。

hermit> tftpdl 192.168.0.90 192.168.0.164 --blksize=1024 --kernel=linux.bin.gz
hermit> tftpdl 192.168.0.90 192.168.0.164 --blksize=1024 --userland=romfs.img.gz

新しいカーネルとユーザーランドで起動したら WI-U2-433DMを USB ポートに挿します。
dmesg に以下のメッセージがあることを確認します。

usbcore: registered new interface driver rtl8812au

lsmod でカーネルモジュールがロードされていることを確認します。

[root@abws1-0 (ttymxc1) ~]# lsmod
8812au 907792 0 - Live 0xbf000000 (O)

ネットワークインタフェースとして認識されていることを確認します。
このドライバーを使った場合は wlan* として認識されます。

[root@abws1-0 (ttymxc1) ~]# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr CC:E1:D5:F7:14:E6
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:10 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)

まだ down した状態なので up して正しく動作するか確認します。
以下のように周辺のアクセスポイントの検索に成功すれば OK です。

[root@abws1-0 (ttymxc1) ~]# ifconfig wlan0 up
[root@abws1-0 (ttymxc1) ~]# iwlist wlan0 scanning
wlan0     Scan completed :
          Cell 01 - Address: 74:03:BD:09:BD:50
                    ESSID:"Buffalo-G-BD50"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.422 GHz (Channel 3)
                    Encryption key:on
                    Bit Rates:144 Mb/s
                    Extra:rsn_ie=30140100000fac040100000fac040100000fac020000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD6B0050F204104A0001101044000102103B0001031047001028802880288018 以下略
                    Quality=0/100  Signal level=68/100
          Cell 02 - Address: 00:1D:73:8E:73:EB
                    ESSID:"001D738E73EB"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.432 GHz (Channel 5)
                    Encryption key:on
                    Bit Rates:300 Mb/s
                    Extra:wpa_ie=dd1a0050f20101000050f20202000050f2040050f20201000050f202
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK
                    Extra:rsn_ie=30180100000fac020200000fac04000fac020100000fac020000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD600050F204104A0001101044000102103B000103104700106CBF8352D7C911 以下略
                    Quality=0/100  Signal level=64/100
           以後略

接続設定

wpa_supplicant を使って暗号化ありの無線LANアクセスポイントに接続する設定を行います。
まず wpa_supplicant の接続用設定ファイルを作成します。

[root@abws1-0 (ttymxc1) ~]# wpa_passphrase YOUR-SSID YOUR-PASSWORD > /etc/config/wpa_supplicant.conf

作成した設定ファイルは以下のような内容になっています。

network={
        ssid="YOUR-SSID"
        #psk="YOUR-PASSWORD"
        psk=e1a0872bd7f7cfd7efa1cbc7d7aec742c58f3ae24e4757d98eae8bf7b53254de
}

接続したい無線LANアクセスポイントの暗号化設定に対応した設定を追加します。

network={
        ssid="YOUR-SSID"
        #psk="YOUR-PASSWORD"
        psk=e1a0872bd7f7cfd7efa1cbc7d7aec742c58f3ae24e4757d98eae8bf7b53254de
        proto=RSN            <-- WPA2 のとき追加
        key_mgmt=WPA-PSK
        pairwise=CCMP        <-- AES のときは CCMP、TKIP のときは TKIP
        group=CCMP           <-- AES のときは CCMP、TKIP のときは TKIP
}

以下のように作成した設定ファイルを指定して wpa_supplicant をフォアグラウンド実行し、
認証が正しく行えるか確認します。

[root@abws1-0 (ttymxc1) ~]# wpa_supplicant -D wext -i wlan0 -c wpa_supplicant.conf -dd
Initializing interface 'wlan0' conf 'wpa_supplicant.conf' driver 'wext' ctrl_interface 'N/A' bridge 'N/A'
Configuration file 'wpa_supplicant.conf' -> '/root/wpa_supplicant.conf'
Reading configuration file '/root/wpa_supplicant.conf'
Line: 1 - start of a new network block
〜〜 中略 〜〜
State: COMPLETED -> GROUP_HANDSHAKE
WPA: Group Key - hexdump(len=32): [REMOVED]
WPA: Installing GTK to the driver (keyidx=1 tx=0).
WPA: RSC - hexdump(len=6): bf 07 00 00 00 00
wpa_driver_wext_set_key: alg=2 key_idx=1 set_tx=0 seq_len=6 key_len=32
WPA: Sending EAPOL-Key 2/2
WPA: TX EAPOL-Key - hexdump(len=99): 01 03 00 5f 02 03 01 00 00 以下略
WPA: Group rekeying completed with 00:3a:9d:91:93:be [GTK=TKIP]
State: GROUP_HANDSHAKE -> COMPLETED
EAPOL: startWhen --> 0

のようなログが流れ HANDSHAKE に成功していれば認証 OK です。

Ctrl + C で終了し、今度はデーモン実行させます。

[root@abws1-0 (ttymxc1) ~]# wpa_supplicant -D wext -i wlan0 -c /etc/config/wpa_supplicant.conf -B

wlan0 が up し認証が成功していることを確認します。

[root@abws1-0 (ttymxc1) ~]# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr CC:E1:D5:F7:14:E6
          inet6 addr: fe80::cee1:d5ff:fef7:14e6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:314 errors:0 dropped:631 overruns:0 frame:0
          TX packets:12 errors:0 dropped:2 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:377798 (368.9 KiB)  TX bytes:2945 (2.8 KiB)

[root@abws1-0 (ttymxc1) ~]# iwconfig wlan0
wlan0     IEEE 802.11bg  ESSID:"YOUR-SSID"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.442 GHz  Access Point: 00:3A:9D:91:93:BE
          Bit Rate:54 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

手動で udhcpc を実行し、アドレスが取得でき通信できることを確認します。

[root@abws1-0 (ttymxc1) ~]# udhcpc -i wlan0
udhcpc (v1.20.2) started
Sending discover...
Sending select for 192.168.0.148...
Lease of 192.168.0.148 obtained, lease time 43200

この wpa_supplicant.conf を保存したい場合は

[root@abws1-0 (ttymxc1) ~]# flatfsd -s

を実行し、/etc/config/ 以下の変更を保存します。
これを行わない場合 atmark dist の設定変更は電源を切ると全て消えてしまいます。

また、wlan0 が up している時 eth0 も up していると通信出来ない場合があります。
この場合は route を適切に設定してやる必要があります。

自動接続設定

Armadillo-Box WS1 の起動時に自動で無線LANアクセスポイントに接続させたい場合には、
以下の設定を行います。

ネットワークインタフェース設定ファイル /etc/network/interfaces に wlan0 の項目を追加します。

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp
iface wlan0 inet dhcp  <-- wlan0 の設定を追加する。

ユーザー起動スクリプトファイル /etc/config/rc.local に以下のような wpa_supplicant の起動設定を追加します。

# Wifi
DEV_NAME=wlan0
if [ -r /sys/class/net/${DEV_NAME} ]; then
    wpa_supplicant -D wext -i ${DEV_NAME} -c /etc/config/wpa_supplicant.conf -B
    sleep 30
    ifup ${DEV_NAME}
fi

sleep は Wifi の認証が完了し wlan0 が up する前に dhcp が実行されないよう調整のため行っています。
設定を行ったら flatfsd -s で設定を保存します。

これで Armadillo-Box WS1 の起動時に、予め wpa_supplicant.conf に設定した無線LANアクセスポイントへ接続し
dhcp で IP アドレスやDNSアドレスを取得します。

更新履歴

2015/12/08 初稿掲載

Satoshi OTSUKA

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2015-12-08 (火) 12:52:01 (734d)