2010年10月05日
KZM-CA9-01のARM UbuntuでUSBの無線LANアダプタを使う (その2)
WLI-U2-KG54Lの場合
前回はLinux 2.6.29でバッファローのWLI-U2-KG54Lを試してうまくいきました。
しかし、カーネルを2.6.35にして同じことをやってみたのですが、今度は無線LANアダプタの初期化で失敗してしまいます。
いろいろとネットで調べてみると、どうやらこのWLI-U2-KG54LはUbuntu 9.04では問題なく使えていたのに、Ubuntu 9.10ではうまくいかなくなったという声が多数みつかりました。
その解決方法としてWindows用のドライバを流用する方法が紹介されているのですが、同じことはARM Linuxではできません。
さらに調べると、WLI-U2-KG54Lと同じZD1211のチップを使っている製品で、Linuxのデバイスドライバにパッチをあてて再ビルドして解決したというのを見つけました。(こちら)
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index 6d66635..b0d32c4 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c @@ -42,6 +42,7 @@ static struct zd_reg_alpha2_map reg_alpha2_map[] = { { ZD_REGDOMAIN_ETSI, "DE" }, /* Generic ETSI, use most restrictive */ { ZD_REGDOMAIN_JAPAN, "JP" }, { ZD_REGDOMAIN_JAPAN_ADD, "JP" }, + { ZD_REGDOMAIN_JAPAN_3, "JP" }, { ZD_REGDOMAIN_SPAIN, "ES" }, { ZD_REGDOMAIN_FRANCE, "FR" }, }; diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h index 7c27591..9701935 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.h +++ b/drivers/net/wireless/zd1211rw/zd_mac.h @@ -193,6 +193,7 @@ struct zd_mac { #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,
このようにソースを修正して再ビルドして試すと、今度は初期化に成功してうまくつながりました。
WLI-UC-GNの場合
意外にうまくいったので、調子に乗ってパソコンショップで新しい無線LANアダプタを買ってきました。バッファローのWLI-UC-GNです。
これはRalink社のRT2870というチップを使っているもので、ネットで調べるとLinux用のドライバもRalink社からダウンロードできるようです。
試しにx86_64のUbuntu 10.04にこのアダプタを挿してみると、自動で認識してGUIで無線LANの設定をしてすぐに使うことができました。
Linux 2.6.35にはすでにRalink社のデバイスドライバはマージされていたので、make menuconfig でそれを有効にして再ビルドして試すと、うまく動かすことができました。
しかし、しばらく使っているとカーネルに以下のようなエラーメッセージが ...
phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x06 failed for offset 0x101c with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110. phy0 -> rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1700 with error -110.
このメッセージを手がかりにソースを調べると、どうもUSBのレベルでconnection time out になっているようです。まだこのチップ用のドライバは"Experimental"(実験版)なので、そのためでしょうか。惜しい。
RaLink社のサイトにあるドライバのソースのほうが新しいかもしれないので、そのうち試してみます。
まとめ
無線LANアダプタはカーネルのドライバのソースさえあれば、ARM Linuxでも簡単に動かせそうだということがわかりました。
特にUSBで接続するデバイスのデバイスドライバはUSBを経由してコマンドとステータスのやりとりをするだけで直接的にI/Oをたたくことはありません。なのであまりホストのCPUアーキテクチャには依存しないようです。つまり、PCのLinuxで動作して、そのデバイスドライバのソースが公開されていれば、それをARM Linuxで動かすのは可能ではないかということ。他のUSB機器もいろいろ試してみようと思います。
トラックバックURL
トラックバック一覧
コメント一覧
(Linksys WUSB600N)
調べてみるとRaLinkからソースを引っ張ってくるのが定番のようです。
実際、あっさりと動作しました。
動いてしまえば、モニターモードもサポートしてることもあり、何かと頼りになるデバイスです。
ご参考)
http://ubuntuforums.org/showthread.php?p=9534492#post9534492