Armadillo
Armadillo-Box WS1
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 のビルド設定のコンフィグファイル
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
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アドレスを取得します。