Buffalo WLI-UC-G300HPをlinux kernel 3.7で使う

[2013/09/18 追記]
Linuxカーネル3.12-rc1でWLI-UC-G300HPのベンダーID、プロダクトIDが追加されたのでこれ以降のバージョンなら再コンパイルなしでいけるとはずです。
ちなみに、回線が遅かったのは自分のミスですorz


引っ越しをしたさきのマンションはBフレッツが使える状況だったんですが、なんか結構遅いので元々持ってたWiMAX使うかーってことでデスクトップPC用にusbのwifiアダプタを買ってきました。
ものはBuffaloのWLI-UC-G300HPです。一応購入前にネットで調べてlinuxで使えそうなのを選んだんですがやっぱりハマったので一応めもです( ..)φカキカキ

環境はFedora 18、カーネルはlinux-3.7.0-rc7です。

まずは何も考えずにUSBポートに刺してからdmesgで確認するとこんな感じになりました。

[    1.487829] usb 3-2: New USB device found, idVendor=0411, idProduct=01a8
[    1.487831] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    1.487833] usb 3-2: Product: 802.11 n WLAN
[    1.487834] usb 3-2: Manufacturer: Ralink
[    1.487836] usb 3-2: SerialNumber: 1.0
[    1.487924] usb 3-2: ep 0x81 - rounding interval to 32768 microframes, ep desc says 0 microframes
[    1.487930] usb 3-2: ep 0x1 - rounding interval to 32768 microframes, ep desc says 0 microframes
[    1.487933] usb 3-2: ep 0x2 - rounding interval to 32768 microframes, ep desc says 0 microframes
[    1.487935] usb 3-2: ep 0x3 - rounding interval to 32768 microframes, ep desc says 0 microframes
[    1.487937] usb 3-2: ep 0x4 - rounding interval to 32768 microframes, ep desc says 0 microframes
[    1.487940] usb 3-2: ep 0x5 - rounding interval to 32768 microframes, ep desc says 0 microframes
[    1.487942] usb 3-2: ep 0x6 - rounding interval to 32768 microframes, ep desc says 0 microframes
[

ベンダIDは0x0411、プロダクトIDは0x01a8ってなってますね。これは後で使います。
そして今回のハマりどころは公式ドライバでしたw とりあえずネットの情報にしたがってRaLinkさんの公式ページからLinux用のドライバをビルドしたんですけどちょっと使ってると↓のようなエラーがでてネットワークが使えなくなってしまうという状態になりました\(^o^)/

[  511.363115] BulkOutDataPacket failed: ReasonCode=-2!
[  511.363119]  >>BulkOut Req=0x11b, Complete=0x11a, Other=0x6
[  511.363122]  >>BulkOut Header:68 0 0 4 0 0 6 40
[  513.468715] BulkOutDataPacket failed: ReasonCode=-2!
[  513.468719]  >>BulkOut Req=0x11b, Complete=0x11a, Other=0x7
[  513.468721]  >>BulkOut Header:68 0 0 4 0 0 6 40

それで色々検索したりして思ったのはWLI-UC-G300HP(のチップセットのドライバ)はLinuxカーネルソースにあるdrivers/net/wireless/rt2x00/でイケるんじゃないかって思って試したところうまくいきました(今これを書いている時点では問題なさそう)!
やったのはWLI-UC-G300HPをrt2800usbで認識するようにするためにベンダID、プロダクトIDを追加。

diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 3b8fb5a..e6eb843 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -949,6 +949,7 @@ static struct usb_device_id rt2800usb_device_table[] = {
        { USB_DEVICE(0x0411, 0x016f) },
        { USB_DEVICE(0x0411, 0x01a2) },
        { USB_DEVICE(0x0411, 0x01ee) },
+       { USB_DEVICE(0x0411, 0x01a8) }, /* WLI-UC-G300HP */
        /* Corega */
        { USB_DEVICE(0x07aa, 0x002f) },
        { USB_DEVICE(0x07aa, 0x003c) },
[

それと以下のようにDefaultとだけ書いたファイルを用意した位です。

[masami@saga:~]$ cat /etc/Wireless/RT2870STA/RT2870STA.dat
Default

モジュールはmodprobe -a rt2800usbで読み込めます。
なにはともあれ買ったwifiアダプタが無駄になることは回避できました( ´∀`)bグッ! ブログネタにもなりましたしねw
WiMAXだってすごい速いって訳じゃないですけどね。ただ、こっちのほうがマシという…