ubuntu10.04でGW-US54GXS

  • 使えるようになったので作業メモ
    • ただし、アドホックモードのみ。
    • ドライバがマスターモードに対応していないのでアクセスポイントとして使うのはこの時点ではできない。
    • GW-US54GXS刺したときの状態
$ tail /var/log/messages
kernel: [ 2657.632023] usb 2-3: new high speed USB device using ehci_hcd and address 3
kernel: [ 2657.764809] usb 2-3: configuration #1 chosen from 1 choice
kernel: [ 2657.880013] usb 2-3: reset high speed USB device using ehci_hcd and address 3
kernel: [ 2658.015131] zd1211rw 2-3:1.0: phy1
kernel: [ 2658.025510] usb 2-3: firmware: requesting zd1211/zd1211b_ub
kernel: [ 2658.029815] usb 2-3: firmware: requesting zd1211/zd1211b_uphr
kernel: [ 2658.073844] zd1211rw 2-3:1.0: firmware version 4725
kernel: [ 2658.113848] zd1211rw 2-3:1.0: zd1211b chip 2019:5303 v4810 high 00-90-cc AL2230_RF pa0 ---N-
kernel: [ 2658.130708] usb 2-3: firmware: requesting zd1211/zd1211b_ub
kernel: [ 2658.132533] usb 2-3: firmware: requesting zd1211/zd1211b_uphr

$ lsusb | grep GW-US54GXS
Bus 002 Device 004: ID 2019:5303 PLANEX GW-US54GXS 802.11bg

$ iwconfig 
lo        no wireless extensions.
eth0      no wireless extensions.
br0       no wireless extensions.
tap0      no wireless extensions.
virbr0    no wireless extensions.
wlan0     IEEE 802.11bg  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
    • 無線設定、試行・・・やはりそのままではダメ
# echo "12345678" | wpa_passphrase Test-SSID | grep -v "^#" \
  > /etc/wpa_supplicant.conf
# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf
SIOCSIFFLAGS: Connection timed out
Could not set interface 'wlan0' UP
Failed to initialize driver interface
// 作業ディレクトリ作成、移動
$ mkdir tmp
$ cd !$

// ソース取得、該当部だけ展開
$ sudo aptitude build-dep linux-image-$(uname -r)
$ tar xvfj /usr/src/linux-source-2.6.32.tar.bz2 \
           linux-source-2.6.32/drivers/net/wireless/zd1211rw/
$ cd linux-source-2.6.32/

// フォーラムのままのパッチでは通らないので(ちょっと変更されてるので)
// 専用のパッチを用意してみる。
$ cat gw-us54gxs-2_6_32.patch 
diff -Naur a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
--- a/drivers/net/wireless/zd1211rw/zd_mac.c    2009-12-03 12:51:21.000000000 +0900
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c    2010-05-22 18:12:52.042173004 +0900
@@ -40,6 +40,7 @@
        { ZD_REGDOMAIN_FCC, "US" },
        { ZD_REGDOMAIN_IC, "CA" },
        { ZD_REGDOMAIN_ETSI, "DE" }, /* Generic ETSI, use most restrictive */
+       { ZD_REGDOMAIN_JAPAN_3, "JP" },
        { ZD_REGDOMAIN_JAPAN, "JP" },
        { ZD_REGDOMAIN_JAPAN_ADD, "JP" },
        { ZD_REGDOMAIN_SPAIN, "ES" },
diff -Naur a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
--- a/drivers/net/wireless/zd1211rw/zd_mac.h    2009-12-03 12:51:21.000000000 +0900
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h    2010-05-22 18:13:35.168237384 +0900
@@ -193,6 +193,7 @@
 #define ZD_REGDOMAIN_FRANCE    0x32
 #define ZD_REGDOMAIN_JAPAN_ADD 0x40
 #define ZD_REGDOMAIN_JAPAN     0x41
+#define ZD_REGDOMAIN_JAPAN_3   0x49

 enum {
        MIN_CHANNEL24 = 1,

// こんなかんじに配置
$ ls 
drivers  gw-us54gxs-2_6_32.patch

// パッチ適用
$ patch -p1 < gw-us54gxs-2_6_32.patch
patching file drivers/net/wireless/zd1211rw/zd_mac.c
patching file drivers/net/wireless/zd1211rw/zd_mac.h

// Makefileの変更
$ cd drivers/net/wireless/zd1211rw/
$ cp -a Makefile Makefile.o
$ cat Makefile
#obj-$(CONFIG_ZD1211RW) += zd1211rw.o
#
#zd1211rw-objs := zd_chip.o zd_mac.o \
#       zd_rf_al2230.o zd_rf_rf2959.o \
#       zd_rf_al7230b.o zd_rf_uw2453.o \
#       zd_rf.o zd_usb.o
#
#ifeq ($(CONFIG_ZD1211RW_DEBUG),y)
#EXTRA_CFLAGS += -DDEBUG
#endif
obj-$(CONFIG_ZD1211RW) += zd1211rw.o

zd1211rw-objs := zd_chip.o zd_mac.o \
        zd_rf_al2230.o zd_rf_rf2959.o \
        zd_rf_al7230b.o zd_rf_uw2453.o \
        zd_rf.o zd_usb.o

KDIR    :=/lib/modules/$(shell uname -r)/build
PWWD    :=$(shell pwd)

all:
    $(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean

$ make
    • rootで適用する。
// 変更前にモジュールのバックアップを取っておく。
# cd /lib/modules/`uname -r`/kernel/drivers/net/wireless/zd1211rw/
# cp -a zd1211rw.ko zd1211rw.ko.o

// さっきの作業ディレクトリへ
# cd tmp/hato/linux-source-2.6.32/drivers/net/wireless/zd1211rw/
# ls | grep ko
zd1211rw.ko
# cp -a zd1211rw.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/zd1211rw/
# depmod -a
// 

    • 刺す。上手く行ってればLEDが青く光るはず。
$ tail -F /var/log/messages
kernel: [ 4970.344015] usb 2-3: new high speed USB device using ehci_hcd and address 5
kernel: [ 4970.476825] usb 2-3: configuration #1 chosen from 1 choice
kernel: [ 4970.600015] usb 2-3: reset high speed USB device using ehci_hcd and address 5
kernel: [ 4970.733750] zd1211rw 2-3:1.0: phy3
kernel: [ 4970.733769] usbcore: registered new interface driver zd1211rw
kernel: [ 4970.746681] usb 2-3: firmware: requesting zd1211/zd1211b_ub
kernel: [ 4970.751855] usb 2-3: firmware: requesting zd1211/zd1211b_uphr
kernel: [ 4970.795729] zd1211rw 2-3:1.0: firmware version 4725
kernel: [ 4970.835734] zd1211rw 2-3:1.0: zd1211b chip 2019:5303 v4810 high 00-90-cc AL2230_RF pa0 ---N-
kernel: [ 4970.838111] cfg80211: Calling CRDA for country: JP
kernel: [ 4970.840086] cfg80211: Regulatory domain changed to country: JP
kernel: [ 4970.840089]     (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
kernel: [ 4970.840092]     (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm)
kernel: [ 4970.840094]     (2457000 KHz - 2482000 KHz @ 20000 KHz), (N/A, 2000 mBm)
kernel: [ 4970.840097]     (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm)
kernel: [ 4970.840099]     (4910000 KHz - 4930000 KHz @ 10000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.840101]     (4910000 KHz - 4990000 KHz @ 40000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.840104]     (4930000 KHz - 4950000 KHz @ 10000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.840106]     (5030000 KHz - 5045000 KHz @ 10000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.840108]     (5030000 KHz - 5090000 KHz @ 40000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.840111]     (5050000 KHz - 5060000 KHz @ 10000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.840113]     (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
kernel: [ 4970.840115]     (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
kernel: [ 4970.840118]     (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2300 mBm)
kernel: [ 4970.860303] ADDRCONF(NETDEV_UP): wlan0: link is not ready

// うまくいっている?
# wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf
WPS-AP-AVAILABLE
WPS-AP-AVAILABLE
^CCTRL-EVENT-TERMINATING - signal 2 received

// ネットワーク設定(この設定はあまり意味がないけれど・・・)
# cat /etc/network/interface
auto wlan0
iface wlan0 inet static
        address 192.168.1.4
        netmask 255.255.255.0
        gateway 192.168.1.1
        wpa-driver wext
        wpa-conf /etc/wpa_supplicant.conf

# ifup wlan0

// 通信確認

# iwlist scanning 
スキャンされたアクセスポイントが表示される。

# ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=0.028 ms

// down させると LED 消える。
# ifdown wlan0