Trick or Treat with kernel

Gentooテスト環境を構築する直前に何気に入手した IO-DATA の WN-G300U。
せっかくなので認識させてみようと、色々と試行錯誤してみた*1


適当に調べてみると、Ubuntuで試行錯誤している記事はちらほらと。
Ubuntu Magazine Japan vol.04にも記載があるし、適当に弄ったら動くかな、と調査開始。

ここまで調べてみると、rt2800usb を使わずに staging にある rt2870sta を使えということらしい。


安西先生、sys-kernel/gentoo-sources-2.6.34-r12 には rt2870sta がありません。


読み進めていくと、どうも 2.6.34 あたりで staging から抜けたらしく、

It also works fine with 2.6.32 gentoo kernel with the staging Ralink 3070 driver. Nevertheless, it seems that the newer kernels 2.6.34 and 2.6.35 do not support the chipset.

http://en.gentoo-wiki.com/wiki/Ralink_RT2870

とか書かれている始末。
でも rt2800usb として見えることは見えるらしく、dmesg には

usb 1-2: new high speed USB device using ehci_hcd and address 2
usb 1-2: New USB device found, idVendor=04bb, idProduct=0948
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: WN-G300U
usb 1-2: Manufacturer: I-O DATA DEVICE, INC.
usb 1-2: SerialNumber: xxxxxxxxxxxx

= snip =

phy0: Selected rate control algorithm 'pid'
Registered led device: rt2800usb-phy0::radio
Registered led device: rt2800usb-phy0::assoc
Registered led device: rt2800usb-phy0::quality
usbcore: registered new interface driver rt2800usb

= snip =

rt2800usb 1-2:1.0: firmware: requesting rt2870.bin
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
rt2800usb 1-2:1.0: firmware: requesting rt2870.bin
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
rt2800usb 1-2:1.0: firmware: requesting rt2870.bin
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
(以下略)

ということで Firmware が無いぞと怒られている様子。一応 wlan0 として見えていて

# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

とは見えるものの、wpa_supplicant の設定してみても SIOCSIFFLAGS が飛んできて終わり。

# /etc/init.d/net.wlan0 start
 * Starting wlan0
SIOCSIFFLAGS: No such file or directory
SIOCSIFFLAGS: No such file or directory
 *   Starting wpa_supplicant on wlan0 ...
SIOCSIFFLAGS: No such file or directory
Unsupported driver 'rt2800usb'.                                           [ !! ]

ということで、何となく Ubuntu 10.10 を使って試行錯誤したら動くことは動くので、2.6.32 にして staging ドライバを Ralinkで配布している 設定ファイルをコピーすればなんとかなるらしい。このへんから出てくる選択肢はこんな感じか。

  1. sys-kernel/gentoo-sources-2.6.32-r20 あたりに戻して、Ubuntuと同じようにstagingドライバ使用
  2. sys-kernel/gentoo-sources-2.6.34-r12 をハック
  3. sys-kernel/gentoo-sources-2.6.36 に飛ぶ(~x86

2.6.36 にすればなんとかなるかな、と思ったのは一番初めに 「WN-G300U Linux」でぐぐったとき普通に

  • vendor: 04bb ("I-O Data Device, Inc."), product: 0948 ("WN-G300U Wireless LAN Adapter")
Linux Kernel Driver DataBase: CONFIG_RT2800USB: Ralink rt27xx/rt28xx/rt30xx (USB) support

と記載があったのと、debian-bugs-dist に rt2870sta から rt2800usb にしてみたいんだけど的な話題があったので意外となんとかなるかな、という目論見。

 # ACCEPT_KEYWORDS="~x86" emerge gentoo-sources
 # cd /usr/src/
 # rm linux
 # ln -s linux-2.6.36-gentoo linux
 # genkernel all --menuconfig 

で再度試すと、

 # /etc/init.d/net.wlan0 start
 * Starting wlan0
SIOCSIFFLAGS: No such file or directory
SIOCSIFFLAGS: No such file or directory
 *   Starting wpa_supplicant on wlan0 ...
SIOCSIFFLAGS: No such file or directory
Unsupported driver 'rt2800usb'.                                           [ !! ]

……ですよねー。
というか、Gentoo Forums とかを読んでても無線LANアダプタ関係で出てくる SIOCSIFFLAGS の原因が自分的に読み解けてないんで、これ以上はなんとも。また気力ができたときに続けよう。

*1:というよりも、IEEE 802.11n 用のUSBアダプタを探してたら偶然安売りしていて、その場でぐぐってみたらkernel上にそれらしき文字列があったので衝動買いしただけだが。