カーネルとユーザランドの設定 (無線LANドライバ編)

カーネルとユーザランドの設定 (無線LANドライバ編)

ArmadilloでRalink Chipの無線LANアダプタを利用する方法について説明する。 対象とするのは、比較的ポピュラーな Ralink Chipを(RT3070/RT3370/RT5370/RT5372系チップ) 搭載したUSB無線LANインターフェース。

カーネルの設定

Armadillo-440用のデフォルトのカーネル (linux-a400-1.09.bin.gz) では無線LANに関するオプションが有効になっていないため、無線LANを有効にしカーネルの再コンパイルが必要となる。

atmarkdist02.png
図2 カーネル設定画面

上のようなカーネルの設定画面が表示されたら、下記の無線LANデバイスに関するオプションにチェックをつける。

  • Device Drivers --->
    • [*] Network device support --->
      • Wireless LAN --->
        • [*] Wireless LAN (IEEE 802.11)

Exitしてカーネルの設定メニューを抜ける。

atmarkdist03.png
図3 Wireless LAN (IEEE 802.11)を有効にする

ユーザランド (romfs) の設定

カーネルの設定画面を抜けると、ユーザランドの設定画面が起動する。

atmarkdist04.png
図4 ユーザランド設定画面

Network Applicationsの設定に入り、下の方の hostap にチェックをいれる。すると、更に下層のメニューが開くので、wpa_supplicant にチェックを入れる。

  • Network Applications --->
    • [*] hostap
      • [*] wpa_supplicant

この他

  • wireless_tools support
  • iwconfig
  • iwlist
  • iwpriv

などのWLAN関係のツールがチェックされていることを念のため確認。

atmarkdist05.png
図5 ユーザランド設定画面

以上が終わったらExitで抜ける。

user/hostap/wpa_supplicant/.config の編集

このままmakeを行うと、madwifi関係のコンパイルでエラーになるため、user/hostap/wpa_supplicant/.config の設定を変更する。

 $ vi user/hostap/wpa_supplicant/.config

として、以下のように CONFIG_DRIVER_MADWIFI=y をコメントアウトする。

 # Driver interface for madwifi driver
 #CONFIG_DRIVER_MADWIFI=y
 # Change include directories to match with the local setup
 CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/wireless/madwifi

ビルド

以上が終了したら、コンパイルを行います。 atmark-dist 直下のディレクトリで make clean と make を行います。 以前コンパイルしたオブジェクトファイルなどが残っている場合があるので、make clean は必ず行ってください。 コンパイルはPCの性能にもよりますが、数分から十数分かかります。

 atmark@atde3:~/work/atmarkdist/atmark-dist$ make
 make -C tools/sg-cksum
 make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/tools/sg-cksum' に入ります
   :
  数分から十数分
   :
 /home/atmark/work/atmarkdist/atmark-dist/tools/cksum -b -o 2 /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz >> /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz
 make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/vendors/AtmarkTechno/Armadillo-440' から出ます
 atmark@atde3:~/work/atmarkdist/atmark-dist$

 
依存関係などでエラーが出るケースがあるが、丹念に依存関係を解決するよう設定を見直してください。それでもコンパイルが出来ない場合、atmark-distとLinuxカーネルともにソースから展開し初期状態から行うと良い場合もあります。

ドライバソースのダウンロード

Ralinkのサイトからドライバのソースコードをダウンロードする。

対象無線LANデバイス

以下に、Ralinkチップを使用したUSB無線LANデバイスのリストを示す。

RT8070/RT3070/RT3370/RT5370/RT5372系チップ

RT3070/RT3370/RT5370/RT5372系チップ用ドライバは以下からダウンロード可能。

メーカー 型番 VID:PID Chip
RT8070系チップ
BUFFALO WLI-UC-GNM 0411:01a2 RT8070V
LOGITEC LAN-GMW/DS 0789:0168 RT8070V
LOGITEC LAN-GMW/PSP 0789:0168 RT8070V
LOGITEC LAN-W150N/U2 0789:0164 RT8070V
RT3070系チップ
PLANEX GW-USMicroN 2019:ED14 RT3070L
PLANEX GW-USMicroN-G 2019:ED14 RT3070L
PLANEX GW-USMicro300 2019:AB29 RT3072L
Logitec LAN-W150N/U2DS 0789:0164 RT3070?
Logitec LAN-WN11/U2 0789:0164 RT3070L
BUFFALO WLI-UC-GN 0411:015D RT3070L
BUFFALO WLI-UC-GNHP 0411:0158 RT3070L
BUFFALO WLI-UC-GNP 0411:019E RT3070L
BUFFALO WLI-UC-GNT 0411:015D RT3070L
BUFFALO WLI-UC-GNM 0411:01A2 RT3070L?
BUFFALO WLI-UC-GNM2 0411:01A2 RT3070L?
BUFFALO WLI-UC-GNM2R 0411:01A2 RT3070L?
BUFFALO WLI-UC-G301N 0411:01A2 RT3070L?
IODATA WN-G150U 04BB:0947 RT3070
RT3370系チップ
BUFFALO WLI-UC-G300N 0411:00E8 RT3370
BUFFALO WLI-UC-G300HP 0411:0148 RT3370
BUFFALO WLI-UC-GNHP 0411:0158 RT3370
BUFFALO WLI-UC-GN 0411:015D RT3370
BUFFALO WLI-UC-GNP 0411:019E RT3370
BUFFALO WLI-UC-GNM 0411:01A2 RT3370
Logitec LAN-W300N/U2 0789:0166 RT3370
PLANEX GW-USMini2N 2019:AB25 RT3370
RT5370系チップ
BUFFALO WLI-UC-G300N 0411:00E8 RT5370
BUFFALO WLI-UC-AG300N 0411:012E RT5370
BUFFALO WLI-UC-G300HP 0411:0148 RT5370
BUFFALO WLI-UC-GNHP 0411:0158 RT5370
BUFFALO WLI-UC-GN 0411:015D RT5370
BUFFALO WLI-UC-GNP 0411:019E RT5370
BUFFALO WLI-UC-GNM 0411:01A2 RT5370
Logitec LAN-W300N/U2 0789:0166 RT5370
PLANEX GW-USMini2N 2019:AB25 RT5370

RT2800系チップ

RT2800系チップ用ドライバは以下からダウンロード可能。RT3070/RT3370/RT5370/RT5372系チップ用ドライバで動作するとの情報もあるが詳細は不明。

http://www.ralinktech.com/en/04_support/license.php?sn=5021

メーカー 型番 VID:PID Chip
RT2800系チップ
BUFFALO WLI-UC-G300N 0411:00E8 RT2800
BUFFALO WLI-UC-AG300N 0411:012E RT2800
BUFFALO WLI-UC-G300HP 0411:0148 RT2800
BUFFALO WLP-UC-AG300 0411:0150 RT2800
BUFFALO WLI-UC-GNHP 0411:0158 RT2800
BUFFALO WLI-UC-GN 0411:015D RT2800
BUFFALO WLI-UC-G301N 0411:016F RT2800
BUFFALO WLI-UC-GNM 0411:01A2 RT2800
Logitec LAN-WN22/U2 0789:0162 RT2800
Logitec LAN-WN12/U2 0789:0163 RT2800
Logitec LAN-W150/U2M 0789:0164 RT2800
Logitec LAN-W300N/U2 0789:0166 RT2800
Logitec LAN-W150N/U2 0789:0168 RT2800
Corega CG-WLUSB2GNL 07AA:002F RT2800
Corega CG-WLUSB2GNL 07AA:003C RT2800
Corega CG-WLUSB300AGN 07AA:003F RT2800
Corega CG-WLUSB300GNS 07AA:0041 RT2800
Corega CG-WLUSB300GNM 07AA:0042 RT2800
PLANEX GW-US300MiniS 2019:AB24 RT2800
PLANEX GW-USMini2N 2019:AB25 RT2800
PLANEX GW-US300MiniW 2019:ED06 RT2800
RT2870系チップ
エレコム LAN-W150N/U2KT 0789:0168 RT2870
BUFFALO WLI-UC-G300N 0411:00E8 RT2870
Logitec LAN-WN22/U2 0789:0162 RT2870
Logitec LAN-WN12/U2 0789:0163 RT2870
Logitec W150/U2M 0789:0164 RT2870
Corega CG-WLUSB2GNL 07AA:002F RT2870
Corega CG-WLUSB2GNL 07AA:003C RT2870
Corega CG-WLUSB300AGN 07AA:003F RT2870
PLANEX GW-USMini2N 2019:AB25 RT2870
PLANEX GW-US300Mini 2019:ED06 RT2870
PLANEX GW-USMicroN 2019:ED14 RT2870

ダウンロード・展開

ダウンロードしたソースをatmark-distと同じディレクトリに展開する。 なお、ダウンロードしたソースはファイル名の拡張子がbz2のみになっているが実際はtar.bz2圧縮である。

 $ tar xvjf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2
 $ mv 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO RT3070 // ディレクトリ名が長いので修正
 $ cd RT3070

パッチを当てる

を当てる。

 $ wget http://aaaaa/RT3070.patch
 $ patch -p1 < RT3070.patch

ビルドする

makeする。 atmark-dist と同じディレクトリ以外に展開した場合、環境変数 ATMARKDIST_DIRに設定してmakeする必要がある。 以下の例では、atmark-dist が /home/atmark/work/atmark-dist にあると仮定している。

 $ ATMARKDIST_DIR=/home/atmark/work/atmark-dist make
 $ ATMARKDIST_DIR=/home/atmark/work/atmark-dist make install

これにより、atmark-dist/romfs以下のディレクトリにカーネルモジュール (rt5370sta.ko) と設定ファイル (RT2830STA.dat) が保存される。

  • romfs/lib/modules/2.6.26-at16/kernel/drivers/net/wireless/rt5370sta.ko
  • romfs/etc/Wireless/RT2870STA/RT2870STA.dat

イメージを書き込む

romfsイメージを作る

Armadilloに書き込むための romfs イメージを再度作成する。

 $ cd /home/atmark/work/atmark-dist
 $ make image
 $ ls -al images
 合計 45300
 drwxr-xr-x  2 atmark atmark     4096 2012-08-12 11:46 .
 drwxr-xr-x 15 atmark atmark     4096 2012-08-13 01:26 ..
 -rwxr-xr-x  1 atmark atmark  3626594 2012-08-12 15:54 linux.bin
 -rw-r--r--  1 atmark atmark  1769841 2012-08-12 15:54 linux.bin.gz
 -rw-r--r--  1 atmark atmark 29314085 2012-08-12 15:54 romfs.img
 -rw-r--r--  1 atmark atmark 11603547 2012-08-12 15:54 romfs.img.gz

カーネル linux.bin.gz およびユーザランド romfs.img.gz

Armadillo にユーザランドイメージをダウンロードする

hermitなどを立ち上げてromfs.img.gz をユーザランドにダウンロードする。 詳細については、アットマークテクノの以下のページを参照してください。

第6章 フラッシュメモリの書き換え方法

無線LANの設定

キーの取得

 # wpa_passphrase <SSID>

により、パスフレーズ入力プロンプトが表示されるので、パスフレーズを入力すると以下のように暗号化された psk のキーが出力される。

 # wpa_passphrase HOGE
 # reading passphrase from stdin
 4332221111
 network={
         ssid="HOGE
         #psk="4332221111"
         psk=b7752c14f1586911c99a4bbce1ad3921f5bbbb9e62a05dcc8f7be6fae8c2fca5

/etc/config/interfaces の修正

無線LAN用に /etc/config/interfaces を以下のように修正する。

 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
 
 auto lo ra0
 
 iface lo inet loopback
 #iface eth0 inet dhcp
 
 iface ra0 inet dhcp
   pre-up modprobe rt5370sta
   wpa-ssid MARISA
   wpa-psk b7752c24f1586911c99a4bbce1ad3921f5bbbb9e62a05dcc8f7be6fae8c2fca5
   scan_ssid 0 
   ap_scan 11

さらに、flatfsd で変更された interfaces ファイルを flatfsd で config 領域に保存する。

 # flatfsd -s

確認

再起動し無線LANが動作していることを確認する。

 Configuring network interfaces: Using /lib/modules/2.6.26-at16/kernel/drivers/net/wireless/rt5370sta.ko
 rtusb init rt2870 --->
 usbcore: registered new interface driver rt2870
 no /sbin/wpa_supplicant found; none killed.
 ioctl[SIOCSIWPMKSA]: Network is down
 ioctl[SIOCSIWMODE]: Network is down
 Could not configure driver to use managed mode
 0x1300 = 00064300
 ioctl[SIOCSIWAUTH]: Operation not supported
 WEXT auth param 4 value 0x0 - udhcpc (v0.9.9-pre) started
 Sending discover...
 Sending discover...
 Sending discover...
 Sending select for 192.168.11.16...
 Lease of 192.168.11.16 obtained, lease time 86400
                                                                 done
 Starting inetd:                                                 done

ログイン後、iwconfig, ifconfig などで動作状況を確認できる。

 # iwconfig ra0
 ra0       Ralink STA  ESSID:"MARISA"  Nickname:"RT2870STA"
           Mode:Managed  Frequency=2.437 GHz  Access Point: 00:3A:9D:DC:7C:6A
           Bit Rate=270 Mb/s
           RTS thr:off   Fragment thr:off
           Encryption key:BA10-1A03-2808-3D5E-1F43-2A50-BF10-25A7   Security mode:open
           Link Quality=100/100  Signal level:-53 dBm  Noise level:-74 dBm
           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
           Tx excessive retries:0  Invalid misc:0   Missed beacon:0
 # ifcnofig ra0
 ra0       Link encap:Ethernet  HWaddr 00:22:CF:41:6F:4D
           inet addr:192.168.11.16  Bcast:192.168.11.255  Mask:255.255.255.0
           UP BROADCAST RUNNING 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:658590 (643.1 KiB)  TX bytes:50439 (49.2 KiB)

トラブルシューティング

モジュールのロードができていない

何らかの理由でモジュールがロードできていない場合、無線LANデバイスは使用できない。

 # lsmod (ロードされているモジュールを見る)
 Module                  Size  Used by    Not tainted
 rt5370sta 752944 1 - Live 0xbf000000

もし、rt5370sta モジュールがロードされていない場合、手動でロードしてみる。

 # modprobe rt5370sta
 または
 # insmod /lib/modules/2.6.26-at16/kernel/drivers/net/wireless/rt5370sta.ko

ネットワークインターフェースが起動しない

モジュールがロードされているのにに、ネットワーク・インターフェース ra0 が起動しない場合、手動で起動してみる。

 # ifconfig ra0 up
 # ifconfig ra0
 ra0       Link encap:Ethernet  HWaddr 00:22:CF:41:6F:4D
           inet addr:192.168.11.16  Bcast:192.168.11.255  Mask:255.255.255.0
           UP BROADCAST RUNNING 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:658590 (643.1 KiB)  TX bytes:50439 (49.2 KiB)

IPアドレスが割り当てられない

ネットワークインターフェースが割り当てられない場合、手動でDHCPクライアントを起動してみる。

 # udhcpc -b -p /var/run/udhcpc.ra0.pid -i ra0

参考ページ

Atmarkテクノ Webページ

その他

ファイルダウンロード

この節で使用したファイルを以下からダウンロードできます。

ファイル名 (サイズ) 説明 日付
ドライバ設定: カーネルモジュール
rt3070_mod_linux.bin.gz
1,765,638 bytes
CDC ACM, RT3070系ドライバを組み込んだArmadillo-440用カーネルイメージ。
CMSのシステムの都合上ファイル名が linux.bin_.gz となっています。
2012.08.19
rt3070_mod_romfs.img.gz
11,594,936 bytes
CDC ACM, RT3070系ドライバを組み込んだArmadillo-440用ユーザランドイメージ。
CMSのシステムの都合上ファイル名が romfs.img_.gz となっています。
2012.08.19
rt3070_configs.tar.gz
19,440 bytes
上記設定をしたLinuxカーネル設定ファイル。 2012.08.19

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2160
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク