お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-05-10 00:03:20

Mocchi
管理者
登録日: 2009-05-17

NattyでRaLink系のチップを搭載した無線LANデバイスを使う方法

この投稿は、RT2860チップを搭載した無線LANアダプタ(PCIカード)が使えましたのセルフフォローも兼ねています。

私はコレガ社のCG-WLCB144GNL(商品情報@corega.jp)をずっと使い続けています。Nattyはアルファからずっとテストに参加してきたのですが、ベータになって使えなくなったことに気づきました。

またつい最近、Buffalo社のWLI-UC-GN(商品情報@buffalo.jp)を使う機会があったのですが、やはりNattyでは使えませんでした。

原因は、これらのデバイスには2種類のカーネルモジュールが対応しており、理由はわかりませんが特定の片方でなければ適切に動作しないということのようです。設定を少し変更することでちゃんと使えるようになりました。

以下詳細です。先に無線LANデバイスに関する情報を調べるには@wiki.ubuntulinux.jpも参照しておくとよいでしょう。

まずコマンド「ifconfig」でネットワーク・インターフェイスを調べました。リストに無線LAN由来のインターフェイスが表示されなかったので、もっと低いレベルの問題と考えました。具体的にはカーネルモジュールが怪しいかなと。

コレガ社の製品のデバイス情報

コード:

$ lspci;
(中略)
06:00.0 Network controller: Ralink corp. RT2800 802.11n PCI

コード:

$ lspci -vnns 06:00.0;
06:00.0 Network controller [0280]: Ralink corp. RT2800 802.11n PCI [1814:0601]
    Subsystem: Allied Telesyn International Device [1259:c129]
    Flags: bus master, slow devsel, latency 64, IRQ 16
    Memory at c0000000 (32-bit, non-prefetchable) [size=64K]
    Capabilities: <access denied>
    Kernel driver in use: rt2800pci
    Kernel modules: rt2860sta, rt2800pci

このデバイスはRaLink社のRT2800チップが内蔵されているようで、2種類のカーネルモジュール、「rt2800pci」または「rt2860sta」が対応しているようです。前者はオープンソースコミュニティが開発しているもの、後者はRaLink社謹製のもののようです。現在はrt2800pciの方で動作しています。


Buffalo社の製品のデバイス情報の場合は

コード:

$ lsusb;
(中略)
Bus 001 Device 008: ID 0411:015d MelCo., Inc. Buffalo WLI-UC-GN Wireless LAN Adapter [Ralink RT2870]

コード:

$ lsusb -t;
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/4p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/4p, 480M
    |__ Port 3: Dev 10, If 0, Class=vend., Driver=rt2800usb, 480M

こちらも同じくRaLink社のRT2870チップを内蔵しているようです。カーネルモジュールはオープンソースコミュニティが開発したrt2800usbを使っているようです。ひょっとしてコレガ社のものと同じ展開かなと思い調べてみると、rt2870staというカーネルモジュールがUbuntuのLinuxカーネルに組み込まれていました。

ここで、rt2800pciやrt2800usb(オープンソース)の代わりにrt2860staやrt2870sta(プロプライエタリ)を使うように設定を変更したところ、ちゃんと動作するようになりました。

手順は、まずロードされているカーネルモジュールの一覧を表示します。コレガ社のデバイスの方を例とします。

コード:

$ lsmod;
Module                  Size  Used by
(中略)
rt2860sta             488097  0 
rt2800lib              38835  1 rt2800pci
crc_ccitt              12331  2 rt2860sta,rt2800lib
rt2x00pci              12721  1 rt2800pci
rt2x00lib              32825  3 rt2800pci,rt2800lib,rt2x00pci
mac80211              239384  3 rt2800lib,rt2x00pci,rt2x00lib
cfg80211              136681  2 rt2x00lib,mac80211
eeprom_93cx6           12344  1 rt2800pci
(省略)

「rt2800pci」と「rt2860sta」のどちらもロードされています。そのため、以下のコマンドで「rt2800pci」を無効にします。この際、デバイスを外しておかないと「カーネルモジュールが仕様中だよん」というエラーが出ます。

コード:

$ sudo modprobe -r rt2800pci;

再びlsmodで確認すると、rt2860staのみロードされていることがわかります。

コード:

$ lsmod;
rt2860sta             488097  1 
crc_ccitt              12331  1 rt2860sta

ここでデバイスを接続すると、ちゃんと動作するようになりました。lspciの出力は以下です。rt2860staが使われていることがわかります。

コード:

$ lspci -vnns 06:00.0;
06:00.0 Network controller [0280]: Ralink corp. RT2800 802.11n PCI [1814:0601]
    Subsystem: Allied Telesyn International Device [1259:c129]
    Flags: bus master, slow devsel, latency 64, IRQ 16
    Memory at c0000000 (32-bit, non-prefetchable) [size=64K]
    Capabilities: <access denied>
    Kernel driver in use: rt2860sta
    Kernel modules: rt2860sta, rt2800pci

最後に、起動の度にmodprobeを実行するのは面倒ですので、rt2800pciとrt2800usbをblacklistに登録しました。

コード:

$ sudo gedit /etc/modprobe.d/blacklist-rt2800pci.conf;

テキストエディタが開くので「blacklist rt2800pci(改行)blacklist rt2800usb」を追記して保存、終了。

以降、rt2800pci/rt2800usbがロードされることはなくなりました。

なお、オープンソース・コミュニティの提供するカーネルモジュールが優先して適用されてしまうのは、どうやら/lib/modules/(使っているカーネル)/以下にあるファイル「modules.pcimap」と「modules.usbmap」にあるのかなと思います。オープンソース・コミュニティの提供するカーネルモジュールに関するエントリーが、プロプライエタリなカーネルモジュールに関するエントリーよりも上にあったためです。

何故オープンソースコミュニティが開発したカーネルモジュールだとうまく使えないのかというところはわかっていませんが、まず動作するようになりましたので、ワークアラウンドということでご紹介します。

オフライン

 

#2 2011-05-21 16:55:37

monchubu
新しいメンバ
登録日: 2011-05-21

Re: NattyでRaLink系のチップを搭載した無線LANデバイスを使う方法

はじめまして。この投稿通りに設定して
COREGA社のPCIカードバス接続型無線LANアダプタ「CG-WLCB300GNM(ralink:rt2760チップ)」を
UBUNTU11.04で使用しようとしましたが、認識はするものの、アクセスポイントに接続できませんでした。
ですが、Mocchi氏が最後に書かれたblacklistの内容に一行追加し、RALINK社の公式ドライバを適用することで使用可能になりました。

blacklist-rt2800pci.confの内容

blacklist rt2800pci
blacklist rt2800usb
から、以下のように変更

blacklist rt2800pci
blacklist rt2800usb
blacklist rt2860sta

RALINK社ホームページより公式ドライバ(2011/05/21現座の最新版は2.4.0.0)をダウンロード
http://www.ralinktech.com/
Software→Linuxと辿り、「RT2860PCI/mPCI/CB/PCIe(RT2760/RT2790/RT2860/RT2890)」と書かれたリンク先で
Acceptボタンをクリックしてダウンロード
ダウンロードしたものを適当な場所に展開する。(今回はホームフォルダ)
展開したフォルダの中を「os→linux」と辿り、「config.mk」ファイルを次のように編集

11行目
HAS_WPA_SUPPLICANT=n

HAS_WPA_SUPPLICANT=y

14行目
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n

HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
に変更して保存
ドライバのルートフォルダ(2010_07_16_RT2860_Linux_STA_v2.4.0.0)に戻る。
ここで

$sudo make
$sudo make install

を実行します。
終了後に「/etc/Wireless/RT2860STA」フォルダが作成され、その中に「RT2860STA.dat」があることを確認。
最後に、「/etc/modules」をルート権限で開き、最終行に以下を追加
rt2860sta

すべてを実行後に再起動すると、無事アクセスポイントに接続できました。
電波状況が最良なら、270Mb/s で接続できます。

以上長文失礼いたしました。

オフライン

 

Board footer

Powered by FluxBB