BUFFALO USB無線LAN WLI-UC-GN を Archlinux で使用する


標準のArchlinuxでは動作しないUSB無線LAN WLI-UC-GN
http://buffalo.jp/products/catalog/network/wli-uc-gn/
を使用するための方法。ドライバにパッチ当ててビルドし、設定ファイルを書く。
(追記,少なくともkernel 2.6.36.2ではモジュールの読み込みを禁止するだけでよい)

何もしない場合はうまく動かない

とりあえず,起動中のArchlinuxにさしてみた.

% dmesg | tail
wlan0: RX AssocResp from 00:24:a5:c5:1d:58 (capab=0x31 status=0 aid=1)
wlan0: associated
Intel AES-NI instructions are not detected.
padlock: VIA PadLock not detected.
usb 1-7: new high speed USB device using ehci_hcd and address 5
phy1: Selected rate control algorithm 'minstrel'
Registered led device: rt2800usb-phy1::radio
Registered led device: rt2800usb-phy1::assoc
Registered led device: rt2800usb-phy1::quality
usbcore: registered new interface driver rt2800usb

あれ,普通に認識してね?

% sudo netcfg airstation

// airstation がウチの無線LAN親機

:: airstation up                             [BUSY]
 > WPA Authentication/Association Failed     [FAIL]

が,ダメ!!

% lsusb
...
Bus 001 Device 005: ID 0411:015d MelCo., Inc. Buffalo WLI-UC-GN Wireless LAN Adapter [Ralink RT2870]
...

なんか認識できてるっぽいんだけどねー.

追記 (2010年 12月 27日 月曜日)

Archlinuxのkernel 2.6.36.2にあるrt2870staで動きました.
ただし次のモジュール読み込みを禁止:rt2800usb, rt2800lib, rt2x00usb.

環境等

  • Arch Linux (kernel 2.6.35.8)
  • wireless_tools 29-3

webで調べてみた

分かったこと
  • 使用チップは Ralink RT3070.RT2870ではないらしい.
  • Ralinkは公式でLinuxドライバを出している.

http://www.ralinktech.com/support.php?s=2

  • どうやら動くらしい
  • rt2800usb, rt2800lib, rt2x00usbを読み込まないようにすると良いかも?

AURにrt3070usbという,ドンピシャのパッケージがあるが,このパッケージに必要な
ドライバファイルは公式サイトにはもうない.もうないのだ.

よろしいならば,自分で作ろうではないか.

モジュールの作成

http://www.ralinktech.com/support.php?s=2
からRT3070USB(RT307x)の用のドライバファイル
DPO_RT3370_LinuxSTA_V2.4.0.1_20100831.tgz をもらう.
このとき,何故か名前とメールアドレスを入力しなくてはいけない
(メールにダウンロードURLが遅られてくるとか,そういうことはないので恐らくデタラメでもOK?)
基本的に
http://aur.archlinux.org/packages.php?ID=38021
に従う.

PKGBUILD

pkgname=rt3370
pkgver=2.4.0.1
_pkgdate=20100831
pkgrel=1
pkgdesc="Kernel module and firmware for RaLink RT3070USB WiFi adapter"
url="http://eng.ralinktech.com.tw/support.php?s=2"
license=('GPL')
arch=('i686' 'x86_64')
depends=('kernel26')
install=${pkgname}.install
backup=(etc/Wireless/RT2870STA/RT2870STA.dat)
source=(DPO_RT3370_LinuxSTA_V${pkgver}_${_pkgdate}.tgz
	WLI-UC-GN.patch)
build() {
  cd $srcdir/DPO_RT3370_LinuxSTA_V${pkgver}_${_pkgdate}

  sed -i /"tftpboot"/d Makefile
  patch -Np1 < ${srcdir}/WLI-UC-GN.patch
  make 

  install -D -m 644 -c RT2870STA.dat ${pkgdir}/etc/Wireless/RT2870STA/RT2870STA.dat
  install -D -m 755 -c os/linux/rt3370sta.ko ${pkgdir}/lib/modules/$(uname -r)/kernel/drivers/net/wireless/rt3370sta.ko
  install -D -m 644 -c README_STA_usb ${pkgdir}/usr/share/doc/${pkgname}/README_STA_usb
  install -m 644 -c *.txt ${pkgdir}/usr/share/doc/${pkgname}/
  install -m 644 -c *.dat ${pkgdir}/usr/share/doc/${pkgname}/
}
md5sums=('1f73af693f88f0bc468b5489bfbef282'
         '25f7cb8dd8155d4a5859e862f08ded96')

WLI-UC-GN.patch

diff -Naur DPO_RT3370_LinuxSTA_V2.4.0.1_20100831.orig/common/rtusb_dev_id.c DPO_RT3370_LinuxSTA_V2.4.0.1_20100831/common/rtusb_dev_id.c
--- DPO_RT3370_LinuxSTA_V2.4.0.1_20100831.orig/common/rtusb_dev_id.c	2010-09-01 10:47:30.000000000 +0900
+++ DPO_RT3370_LinuxSTA_V2.4.0.1_20100831/common/rtusb_dev_id.c	2010-10-30 22:33:04.371980004 +0900
@@ -109,6 +109,7 @@
 	{USB_DEVICE(0x0789,0x0166)}, /* Edimax */
 	{USB_DEVICE(0x0DB0,0x822B)}, /* MSI 3070*/

 	{USB_DEVICE(0x0DB0,0x871B)}, /* MSI 3070*/
+	{USB_DEVICE(0x0411,0x015d)}, /* WLI-UC-GN */
 #endif // RT3070 //
 #ifdef RT3370
 	{USB_DEVICE(0x148F,0x3370)}, /* Ralink 3370 */
diff -Naur DPO_RT3370_LinuxSTA_V2.4.0.1_20100831.orig/os/linux/config.mk DPO_RT3370_LinuxSTA_V2.4.0.1_20100831/os/linux/config.mk
--- DPO_RT3370_LinuxSTA_V2.4.0.1_20100831.orig/os/linux/config.mk	2010-08-31 18:12:20.000000000 +0900
+++ DPO_RT3370_LinuxSTA_V2.4.0.1_20100831/os/linux/config.mk	2010-10-30 22:29:37.478667450 +0900
@@ -26,10 +26,10 @@
 HAS_APCLI=n
 
 # Support Wpa_Supplicant
-HAS_WPA_SUPPLICANT=n
+HAS_WPA_SUPPLICANT=y
 
 # Support Native WpaSupplicant for Network Maganger
-HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
+HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
 
 #Support Net interface block while Tx-Sw queue full
 HAS_BLOCK_NET_IF=n

rt3370.install

post_install() {
  /sbin/depmod -a
}

post_upgrade() {
  /sbin/depmod -a
}

post_remove() {
  /sbin/depmod -a
}

設定等

モジュールのロード

% sudo modprobe rt3370sta

邪魔なモジュールのロードを禁止するために
/etc/modprobe.d/modprobe.conf

# WLI-UC-GN
blacklist rt2800usb
blacklist rt2800lib
blacklist rt2x00usb

としておく.多分,/etc/rc.confでも設定できるはず.


ちょっとよく分からないのだが,どうやら
/etc/Wireless/RT2870STA/RT2870STA.dat
に色々書かないとうまく動かないみたい.

#The word of "Default" must not be removed
Default
CountryRegion=0
CountryRegionABand=7
CountryCode=JP
ChannelGeography=1
SSID=<ESSID>
NetworkType=Infra
WirelessMode=5
Channel=0
BeaconPeriod=100
TxPower=100
BGProtection=0
TxPreamble=0
RTSThreshold=2347
FragThreshold=2346
TxBurst=1
PktAggregate=0
WmmCapable=1
AckPolicy=0;0;0;0
AuthMode=WPA2PSK
EncrypType=TKIP
WPAPSK=<PASS>
DefaultKeyID=1
Key1Type=0
Key1Str=
Key2Type=0
Key2Str=
Key3Type=0
Key3Str=
Key4Type=0
Key4Str=
PSMode=CAM
AutoRoaming=0
RoamThreshold=70
APSDCapable=0
APSDAC=0;0;0;0
HT_RDG=1
HT_EXTCHA=0
HT_OpMode=0
HT_MpduDensity=4
HT_BW=1
HT_BADecline=0
HT_AutoBA=1
HT_AMSDU=0
HT_BAWinSize=64
HT_GI=1
HT_MCS=33
HT_MIMOPSMode=3
HT_DisallowTKIP=1
HT_STBC=0
EthConvertMode=
EthCloneMac=
IEEE80211H=0
TGnWifiTest=0
WirelessEvent=0
MeshId=MESH
MeshAutoLink=1
MeshAuthMode=OPEN
MeshEncrypType=NONE
MeshWPAKEY=
MeshDefaultkey=1
MeshWEPKEY=
CarrierDetect=0
AntDiversity=0
BeaconLostTime=4
FtSupport=0
Wapiifname=ra0
WapiPsk=
WapiPskType=
WapiUserCertPath=
WapiAsCertPath=
PSP_XLINK_MODE=0
WscManufacturer=
WscModelName=
WscDeviceName=
WscModelNumber=
WscSerialNumber=
RadioOn=1

自分はnetcfgを使用している。
/etc/network.d/foo

CONNECTION="wireless"
DESCRIPTION="A simple WPA encrypted wireless connection"
INTERFACE="ra0"
SECURITY="wpa"