Armadillo Wifi 対応 †Howto : Armadillo-810/840で IEEE802.11ac USB無線LANアダプタ GW-900D を動作させる 11ac 対応 USB 無線 LAN 子機 Buffalo WI-U2-433DM カーネルのカスタマイズ †Buffalo WI-U2-433DM に使われている Realtek rtl8812au 用の driver をビルドするには、 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アクセスポイントに接続できません。 [*] 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 のビルドはエラーになります。 --- .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 を ます git clone し、 atmark@atde5:~$ git clone https://github.com/gnab/rtl8812au.git atmark@atde5:~$ cd rtl8812au Armadillo-Box 向けにクロスコンパイルするため以下のように Makefile を修正します。 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 以下に配置すると、 イメージ再作成 †ビルドしたドライバーを含むよう、再度イメージを作成します。 atmark@atde5:~$ cd ~/atmark-dist atmark@atde5:~/atmark-dist$ make image atmark-dist/images/ の下のファイルが更新されていることを確認します。 動作確認 †Armadillo-Box WS1 がネットワークに接続してある場合に一番速い書き換え方法である 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 ポートに挿します。 usbcore: registered new interface driver rtl8812au lsmod でカーネルモジュールがロードされていることを確認します。 [root@abws1-0 (ttymxc1) ~]# lsmod 8812au 907792 0 - Live 0xbf000000 (O) ネットワークインタフェースとして認識されていることを確認します。 [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 して正しく動作するか確認します。 [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アクセスポイントに接続する設定を行います。 [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/ 以下の変更を保存します。 自動接続設定 †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 が実行されないよう調整のため行っています。 これで Armadillo-Box WS1 の起動時に、予め wpa_supplicant.conf に設定した無線LANアクセスポイントへ接続し 更新履歴 †2015/12/08 初稿掲載 Satoshi OTSUKA
|