[[Armadillo]]~
[[Armadillo-Box WS1]]
[[Armadillo-Box WS1/BLE Gateway]]

#contents


*Wifi 対応 [#ybc4d672]

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:http://buffalo.jp/product/wireless-lan/client/wi-u2-433dm/]]

**カーネルのカスタマイズ [#xc972dcb]
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)     <-- チェックをいれ有効にする  


**ユーザーランドのコンフィギュレーション [#d586b0d6]
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 コンフィグファイルの修正 [#x8b6d81a]
このままビルドを行うと 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

**カーネルとユーザーランドのビルド [#e55dbfad]
上記の変更を反映したカーネルとユーザーランドを一旦ビルドします。
 atmark@atde5:~/atmark-dist$ make clean
 atmark@atde5:~/atmark-dist$ make


**USB Wifi driver のビルド [#nadd3b21]
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 でロードできるようになります。


**イメージ再作成 [#x919bfff]
ビルドしたドライバーを含むよう、再度イメージを作成します。
 atmark@atde5:~$ cd ~/atmark-dist
 atmark@atde5:~/atmark-dist$ make image
atmark-dist/images/ の下のファイルが更新されていることを確認します。

**動作確認 [#t302713f]
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
            以後略


**接続設定 [#jf39661d]
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 を適切に設定してやる必要があります。


**自動接続設定 [#r2f78ce8]
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アドレスを取得します。


* 更新履歴 [#ke5d7093]
2015/12/08 初稿掲載 ~

RIGHT:Satoshi OTSUKA

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