≪前回のUbuntuでPlanexのGW-US300MinSを動かす件の続きです≫
で、気を取り直して、ドライバのコンパイルにかかります。
Ralink社のホームページからソフトウェアのダウンロードページに移動します。
名前とメールアドレスを記入すると、ダウンロードがスタートします。(が、異常に時間がかかります。600kB程度で10分くらいかかりました。台湾との線が細いんですかね??)
今回ダウンロードしたのは、「2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2」というファイルで、これを適当なディレクトリに展開しました。
さっそくreadmeを見ると、”MODE = STA”にセットしろ、と書いてありますが、先頭の行は”RT28xx_MODE = STA”だったりします。サーチすると、RT28xx_MODEを使っているところがあるので、そっちが正しいのでしょう(つまり、多分readme.txtがいい加減)。
次に、os/linux/config.mk を修正します。
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
これらの行はもともと”n”なので、”y”に変更します。
次に、common/rtusb_dev_id.cにデバイスIDを追加します。
{USB_DEVICE(0x2019,0xAB24)}, /* Planex GW-US300MiniS */
という感じです。
$ sudo make(中略)$ sudo make installmake -C /home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux -f Makefile.6 installmake[1]: ディレクトリ `/home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux’ に入りますrm -rf /etc/Wireless/RT2870STAmkdir /etc/Wireless/RT2870STAcp /home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/RT2870STA.dat /etc/Wireless/RT2870STA/.install -d /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/install -m 644 -c rt2870sta.ko /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless//sbin/depmod -a 2.6.32-28-genericmake[1]: ディレクトリ `/home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux’ から出ます$
完了後、
$ cd os/linux
$ sudo insmod rt2870sta.ko
とした後、 『新しい無線ネットワークを作成』で、WPA-PSKの設定をしてやると認識でき、IPアドレスの取得まではできました。
$ modinfo
filename: /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
ということで、読み込まれているのは、stagingの下のファイルのようです。で、rt2870sta.koを検索してタイムスタンプを見ると、
$ ls -la /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/rt2870sta.ko
-rw-r–r– 1 root root 688693 2011-02-13 03:04 /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/rt2870sta.ko
$ ls -la /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
-rw-r–r– 1 root root 576072 2011-01-11 10:19 /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
となっており、インストールしたものではないようです。ですので、
$ sudo make uninstall
として、一旦アンインストールした後、makefileを
ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = /lib/modules/$(shell uname -r)/build
# Linux 2.4 Change to your local setting
#LINUX_SRC = /usr/src/linux-2.4
##LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/staging/rt2870/
CROSS_COMPILE =
endif
と修正しました。(青字がコメントアウトした元の行、赤字が修正後の行です)
改めて、
$ sudo make install
としてインストールすると、
$ ls -la /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
-rw-r–r– 1 root root 688693 2011-02-13 03:32 /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
$
となり、タイムスタンプが反映され、以下のようにモジュールとして認識されるようになりました。
$ modinfo rt2870sta | grep 2019
alias: usb:v2019pAB24d*dc*dsc*dp*ic*isc*ip*
alias: usb:v2019pED06d*dc*dsc*dp*ic*isc*ip*
$
しかし、ifconfigなどで見るとIPアドレスが取れるようになったのですが、外部への接続はまだうまくいきません。なぜか、クラスAのプライベートアドレスを取得しています。(本来はプロバイダから配布されるクラスBのプライベートアドレスのはずなのですが・・・)
が、ネットワークアイコンから再度アクセスポイントを選択したら、なぜか快調につながるようになりました。・・・が、再起動するとNG。
読み込まれているドライバをみると、やはりrt2800usbが読み込まれているようです。ですので、/etc/modprobe.d/blacklist.confに、
# Planex USB Wifi
blacklist rt2800usb
blacklist rt2x00usb
blacklist rt2x00lib
と書き足して再起動しましたが、やはりクラスAのプライベートアドレスを取りに行ってしまいます。
ここで設定をよくみると、adhocモードになっていましたので、一旦無線の設定を消して改めて利用可能なアクセスポイント(AP)を選択して設定し直したら再起動しても安定して動作するようになりました。
・・・というわけで、Ubuntu10.04でPlanexの1000円USB無線LANアダプタ GW-US300MinSが使えるようになりました。802.11nがLinuxで1000円で使えるなんていい時代になったものです。