2010年10月05日

KZM-CA9-01のARM UbuntuでUSBの無線LANアダプタを使う (その2)

前回の続きです。

今度はカーネルを新しい2.6.35で試してみました。



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

トラックバック一覧

4コアのCortex-A9のKZM-CA9-01ボードを使って実験したことを書いたページをまとめてみました。

コメント一覧

1. Posted by @ryan_j23   2010年10月05日 14:40
私も最近、カーネル付属のRT2870でハマりました。
(Linksys WUSB600N)

調べてみるとRaLinkからソースを引っ張ってくるのが定番のようです。
実際、あっさりと動作しました。

動いてしまえば、モニターモードもサポートしてることもあり、何かと頼りになるデバイスです。

ご参考)
http://ubuntuforums.org/showthread.php?p=9534492#post9534492
2. Posted by koba   2010年10月05日 21:04
ありがとうございます。参考にさせていただきます。

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード