2012年10月6日土曜日

[.tested] Planex GW-USFang300 無線LANアダプタ [AX3][A6]




Planex GW-USFang300は、802.11b/g/nに対応したUSB無線LANアダプタです。
Openblocks AX3およびA6での動作検証を行いました。



OBDN技術ブログによる動作検証は、該当するデバイスの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。


<検証環境>
OpenBlocks AX3/4 Debian 6.0 kernel: 3.0.6
OpenBlocks A6 Debian 6.0 kernel: 2.6.31.8

1. 対応ドライバと事前準備

本デバイスは、Realtek社のWebページの情報から推測するにRTL8192DUを使用しています。
RTL8192DUは、AX3およびA6の標準カーネルパッケージでは対応していません。
そのため、Realtek社のWebページより、ドライバのソースコードパッケージを入手し、ビルドして検証を行いました。

Software: Drivers & Utilities / RTL8192DU-VC

RTL8192DU-VCの、Linux Driver for Kernel 2.6.18~2.6.38 and 3.0.2 の項目にあるリンクからドライバパッケージをダウンロードします。
ダウンロードしたファイルは以下の手順で解凍してください。

# unzip RTL8192DU_linux_v4.0.0_4074.20120518.zip

このパッケージは、ターゲットが対応する機器ならば、作成されたディレクトリへ移動し、
install.shによりインストールが行えるのですが、Openblocksは対応機器にありませんので、
以下の手順によりドライバパッケージのコンパイルおよびインストールを行います。

# cd RTL8192DU_linux_v4.0.0_4074.20120518
# cd driver
# tar xvzf rtl8192DU_linux_v4.0.0_4074.20120518.tar.gz
# cd rtl8192DU_linux_v4.0.0_4074.20120518


Makefileを編集します。
同じバージョンのドライバパッケージを使用する場合は、以下のdiff出力をpatch適用して下さい。
アップデートにより内容が変更されている場合は、参考にして書き換えてください。

# diff -u Makefile.orig Makefile
--- Makefile.orig       2012-10-09 16:32:27.130006123 +0900
+++ Makefile    2012-10-09 16:33:53.650006092 +0900
@@ -36,7 +36,8 @@
 CONFIG_RTL8192CU_REDEFINE_1X1 = n
 CONFIG_INTEL_WIDI = n

-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_I386_PC = n
+CONFIG_PLATFORM_ARM_OBS = y
 CONFIG_PLATFORM_ANDROID_X86 = n
 CONFIG_PLATFORM_ARM_S3C2K4 = n
 CONFIG_PLATFORM_ARM_PXA2XX = n
@@ -219,6 +220,17 @@
 CROSS_COMPILE ?=
 KVER  := $(shell uname -r)
 KSRC := /lib/modules/$(KVER)/build
+MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
+INSTALL_PREFIX :=
+endif
+
+ifeq ($(CONFIG_PLATFORM_ARM_OBS), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
+ARCH ?= arm
+CROSS_COMPILE ?=
+KVER  := $(shell uname -r)
+KSRC := /lib/modules/$(KVER)/build
 MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
 INSTALL_PREFIX :=
 endif


変更後、make / installを行います。

# make install

ドライバは、
/lib/modules/$(KVER)/kernel/drivers/net/wireless/
の下にコピーされ、depmod -aされます。
不要になり、削除する場合は、8192du.koを削除し、depmod -aして下さい。

デバイスをUSBポートに差し込めば認識します。
dmesgは以下の通りです。

usb 1-1: new high speed USB device number 5 using ehci_marvell
usb 1-1: New USB device found, idVendor=2019, idProduct=4903
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: 802.11n NIC
usb 1-1: Manufacturer: Realtek
usb 1-1: SerialNumber: 00e04c000001
rtw driver version=v4.0.0_4074.20120518
Build at: Oct  5 2012 16:08:47
register rtw_netdev_ops to netdev_ops
CHIP TYPE: RTL8192D

usb_endpoint_descriptor(0):
bLength=7
bDescriptorType=5
bEndpointAddress=81
wMaxPacketSize=200
bInterval=0
RT_usb_endpoint_is_bulk_in = 1

usb_endpoint_descriptor(1):
bLength=7
bDescriptorType=5
bEndpointAddress=2
wMaxPacketSize=200
bInterval=0
RT_usb_endpoint_is_bulk_out = 2
nr_endpoint=2, in_num=1, out_num=1

USB_SPEED_HIGH
ReadChipVersion8192D 0xF0 = 0x4411635
Normal CHIP!!!
usb_dvobj_init(): pbuddy_padapter == NULL, Set pbuddy_padapter
EEPROM type is E-FUSE
====> ReadAdapterInfo8192D
Boot from EFUSE, Autoload OK !
E-CUT!!!
EEPROMVID = 0x2019
EEPROMPID = 0x4903
EEPROMCustomerID : 0x00
EEPROMSubCustomerID: 0x00
MAC Address from EFUSE = 00:22:cf:78:3e:78
Is D/E cut,Internal PA0 0 Internal PA1 0
PHY_SetPAMode mode 1, c9 = 0x0 cc = 0xff interface index 0
hal_ReadMacPhyModeFromPROM92DU:: MacPhyMode DUALMAC_DUALPHY
_ReadMacPhyModeFromPROM92DU(): MacPhyCrValue 1
MacPhyMode: DUALMAC_DUALPHY
PHY_ConfigMacPhyModeInfo92D(): wireless_mode = b
ChannelPlan = 16
<==== ReadAdapterInfo8192D
rtw_macaddr_cfg MAC Address  = 00:22:cf:78:3e:78
MAC Address from pnetdev->dev_addr= 00:22:cf:78:3e:78
bDriverStopped:1, bSurpriseRemoved:0, bup:0, hw_init_completed:0
register rtw_netdev_ops to netdev_ops
CHIP TYPE: RTL8192D

usb_endpoint_descriptor(0):
bLength=7
bDescriptorType=5
bEndpointAddress=89
wMaxPacketSize=200
bInterval=0
RT_usb_endpoint_is_bulk_in = 9

usb_endpoint_descriptor(1):
bLength=7
bDescriptorType=5
bEndpointAddress=a
wMaxPacketSize=200
bInterval=0
RT_usb_endpoint_is_bulk_out = a
nr_endpoint=2, in_num=1, out_num=1

USB_SPEED_HIGH
ReadChipVersion8192D 0xF0 = 0x4411635
Normal CHIP!!!
usb_dvobj_init(): pbuddy_padapter exist, Exchange Information
EEPROM type is E-FUSE
====> ReadAdapterInfo8192D
Boot from EFUSE, Autoload OK !
E-CUT!!!
EEPROMVID = 0x2019
EEPROMPID = 0x4903
EEPROMCustomerID : 0x00
EEPROMSubCustomerID: 0x00
MAC Address from EFUSE = 00:22:cf:78:3e:79
Is D/E cut,Internal PA0 0 Internal PA1 0
PHY_SetPAMode mode 1, c9 = 0x0 cc = 0xff interface index 1
hal_ReadMacPhyModeFromPROM92DU:: MacPhyMode DUALMAC_DUALPHY
_ReadMacPhyModeFromPROM92DU(): MacPhyCrValue 1
MacPhyMode: DUALMAC_DUALPHY
PHY_ConfigMacPhyModeInfo92D(): wireless_mode = 14
ChannelPlan = 16
<==== ReadAdapterInfo8192D
rtw_macaddr_cfg MAC Address  = 00:22:cf:78:3e:79
MAC Address from pnetdev->dev_addr= 00:22:cf:78:3e:79
bDriverStopped:1, bSurpriseRemoved:0, bup:0, hw_init_completed:0
usbcore: registered new interface driver rtl8192du


デバイスは、

/dev/wlan0
/dev/wlan1


となり、本アダプタには、2つの無線LANデバイスが組み込まれているのが分かります。
本アダプタには、上記ドライバパッケージのドキュメントによると、DMDPとDMSPの2つのモードがあり、上記手順でインストールすると、wlan0が2.4GHz帯、wlan1が5GHz帯のインタフェースとなるDMDPモードとなり、それぞれの最大速度は150Mbpsとなります。

2. wpasupplicantパッケージの導入およびインタフェースの設定

以下の記事を参照して下さい。

[.tested] Logitec LAN-W150N/U2WH(BK) 無線LANアダプタ [AX3]

上記のドライバにより、wlan0、wlan1それぞれ、クライアントモードでの動作を確認しました。
wlan1では5GHzでの接続になっています。

# iwconfig wlan1
wlan1     IEEE 802.11an  ESSID:"*****"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:5.18 GHz  Access Point: **:**:**:C2:F2:A0
          Bit Rate:150 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=60/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

3. hostapdによるAPモードでの使用方法

2ポートある無線LANポートの片方をAPモードとして設定してみました。

前回、別のボードで設定した、hostapd-1.0そのままでは動作しないため、上記ドライバパッケージを展開したディレクトリの下の、wpa_supplicant_hostapdディレクトリ下にある、

wpa_supplicant_hostapd-0.8_rtw_20120510.zip

というrealtek専用のhostapdパッケージファイルを展開して、使用します。

パッケージファイルを展開し、hostapdディレクトリにてmakeを行うと、hostapdが作成されます。

hostapd.confは、wpa_supplicant_hostapdの下に、

rtl_hostapd_2G.conf

がありますので、環境に合わせて設定してください。

また、eth0とのブリッジ設定に関しては、

[.tested] Silex SX-PCEGN(P)+ PCI-E 無線LANモジュール [AX3]

を参照して下さい。
2.4G/5GHzを同時にAPで使用したい場合は、 ブリッジ設定で、eth0 wlan0 wlan1を設定しておき、
rtl_hostapd_2G.confをwlan0用に、rtl_hostapd_5G.confをwlan1用に設定し、それぞれの設定ファイルを使用してhostapdを立ち上げることになります。

上記のhostapdを使用して、AX3およびA6に対してのiPhone4SやNexus7での接続を確認しました。

4. APモードでハードウェアWPSボタンを使う方法

hostapdには、WPSのサポートがあり、hostapd_cliコマンドやキーボードでWPSのコントロールを行えます。
本デバイスに限らず、最近のWifi USBアダプタにはWPSボタンがついていますが、realtekのドライバパッケージには、このハードウェアボタン用のシグナルハンドルプログラムのサンプルが、上記パッケージの下に置いてあります。
hardware_wps_pbcディレクトリの下のsample.cをmakeし実行すると、ボタンを2秒押すと、
get HW_PBC signal from driver
というメッセージがコンソールに表示されます。
この表示の代わりに
system("hostapd_cli wps_pbs -i wlan0");
と書くと、WPSボタンを使った接続ネゴシエーションを行うための、WPSボタンハンドル用のデーモンとすることが可能になります。
ただし、あくまで評価用ですので、ハンドラ部をhostapdに組み込んだほうがいいと思います。

今回は、Nintendo DSiを使用してWPS接続が出来ることを確認しました。

0 件のコメント:

コメントを投稿