PLANEX 無線LAN USBアダプタ カッ飛び! 11ac USB2.0 5GHz対応 可動式 GW-450D-KATANA
Linux用のドライバは存在するものの、導入に一苦労したのでそのときのメモ。適当にやっている部分もあるので変な手順があったらアドバイスください。
前提条件
OS:CentOS6.5
ネットワーク管理サービス:network(NetworkManagerは使わない)
無線LAN接続ツール:wpa_supplicant
無線LAN方式:WPA2-PSK
暗号化方式:TKIP/AES-CCMP
まずはドライバを入手する。プラネックスのサイトにあるドライバは古い物なので、アダプタ搭載チップのメーカーであるMediaTek社のサイトから最新版を入手する。作業端末でダウンロードしてscpで対象マシンに送るなり、対象マシンのGUI上でブラウザからダウンロードするなりご自由に。
http://www.mediatek.com/_en/07_downloads/01_windows.php?sn=501
「MT7610U USB」をクリックし、ページ下部の名前とメールアドレスを入力。「Submit」をクリックするとダウンロードが開始される。
以下無線LANアダプタを導入するマシンでの作業。ドライバをインストールする。
## makeを実行するためのパッケージ類。普段make作業をするユーザなら入っていると思うけど念のため yum install -y gcc make kernel kernel-devel ## 今回は/tmpを作業ディレクトリとする cd /tmp ##ダウンロードしたファイルがある事を確認 ls | grep mt7610u mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 tar jxvf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 cd mt7610u_wifi_sta_v3002_dpo_20130916 ## USBの無線LANアダプタをマシンに挿した状態で認識されているかを確認 lsusb | grep PLANEX Bus 002 Device 003: ID 2019:ab31 PLANEX ## デバイスIDをドライバソースに追加 vim common/rtusb_dev_id.c 43行目あたり、endifの上に以下の1行を追加 {USB_DEVICE(0x2019,0xab31)}, ## wpa_supplicantの使用設定を追加 vim os/linux/config.mk 以下の2部分をそれぞれ変更 HAS_WPA_SUPPLICANT=n → yに変更 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n → yに変更 ## ドライバのmakeとインストール make cp os/linux/mt7650u_sta.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/ mkdir -p /etc/Wireless/RT2870STA cp RT2870STA.dat /etc/Wireless/RT2870STA/ ## 設定ファイルを編集 vim /etc/Wireless/RT2870STA/RT2870STA.dat 以下のように一部項目を変更 CountryRegion=1 CountryCode=JP SSID= (空の状態にしておく) WirelessMode=9 (11bgnの場合。11aにも対応している環境の人は"5"にすると11abgnモードになる) Channel=0 AuthMode=WPA2PSK ("WEPAUTO", "OPEN", "SHARED", "WPAPSK", "WPA2PSK", "WPANONE" の中から自分の環境を選ぶ) EncrypType=AES ("NONE", "WEP", "TKIP", "AES"の中から自分の環境を選ぶ) WPAPSK= (空の状態にしておく) ## デバイス名をra0として使えるようにmodprobe設定ファイルにaliasを書いてやる vim /etc/modprobe.d/99-local.conf (存在しなければ新規に作成) 以下を追加 alias ra0 mt7650u_sta ## ドライバを読み込み depmod -a modprobe mt7650u_sta lsmod | grep mt7650u_sta mt7650u_sta 928219 1 ## ra0が認識されているか確認 ifconfig -a | grep ra0
ドライバのインストールはここまで。次に、networkサービスの設定ファイルを作成してやる。
vim /etc/sysconfig/network-scripts/ifcfg-ra0 ## 以下の内容で保存(固定IPの場合。LAN内のIPレンジが異なる人、DHCPを使いたい人は適宜修正してください) DEVICE=ra0 ONBOOT=yes BOOTPROTO=none TYPE=Wireless USERCTL=yes IPADDR=192.168.1.2 NETMASK=255.255.255.0 NETWORK=192.168.1.0
このままでもra0をifupすることはできるが、暗号化環境の無線LANに繋げるためwpa_supplicantを設定してやる。
vim /etc/sysconfig/wpa_supplicant ## 以下のように変更 INTERFACES="" ↓ INTERFACES="-ira0" DRIVERS="" ↓ DRIVERS="-Dwext" ## SSIDのパスフレーズを生成する wpa_passphrase SSID名 パスワード ## 以下の内容が出力されるのでpskをコピーしておく network={ ssid="SSID名" #psk="パスワード" psk=df8c40a0c8c2baa2e2e500ea2512d8143c6f26f655eef6820461e273795aff3e(例) } vim /etc/supplicant/wpa_supplicant.conf ## 以下のように追記 network={ ssid="SSID名" key_mgmt=WPA-PSK proto=WPA WPA2 pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 #psk="パスワード"(この行はメモ) psk=df8c40a0c8c2baa2e2e500ea2512d8143c6f26f655eef6820461e273795aff3e(先ほどコピーしたもの) } ## IF(ra0)のアップ ifup ra0 ## wpa_supplicantの起動と自動起動設定 service wpa_supplicant start Starting wpa_supplicant: /etc/wpa_supplicant/wpa_supplicant[ OK ]ira0, -Dwext chkconfig wpa_supplicant on chkconfig --list wpa_supplicant wpa_supplicant 0:off 1:off 2:on 3:on 4:on 5:on 6:off
あとはifconfigなりiwconfigなりで、無線LANの接続を確認する。もしうまく繋がらないようなら、有線LANのIF(eth0など)をifdownで落としてやるとうまくいくかも。
参考にさせていただきました。
/lib/modules/2.6.32-431.el6.i686/build がシンボリックリンクで、make時にNo such Directoryになったのですが、、ダメ元で実ファイルを以下のように複製してみたらエラーはなくなりました。
cd /lib/modules/2.6.32-431.el6.i686
mv build build_org
mkdir build
cp -r /usr/src/kernel/2.6.32-431.el6.i686/* build
>> 村上和夫 さん
お返事が遅くなりすみません。情報ありがとうございます。
シンボリックリンクであるbuild(現在のbuild_org)のリンク先がどこを指しているか気になりますね。
今回使用したマシンでは、別作業でkernel-headersパッケージをインストールしていたので、それが関係しているかもしれません。
すみません。季節遅れのコメントになってしまいますが、村上さんの手順を踏まないと、
kernel-headersがインストールされていても、コンパイルで落ちます。
自己レスですが、Top Directory の Makefile を書き換えた方が正しいかも知れません。
上記の /lib/modules/`uname -r`/build への kernel source code のコピーをせず、
mt7610u_wifi_sta_v3002_dpo_20130916/Makefile の199行目付近
ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = /lib/modules/$(shell uname -r)/build
—> LINUX_SRC = /usr/src/kernels/`uname -r`
これでいいはずです。
>> 上田 隆 さん
情報ありがとうございます。
Makefile内の記述、確かにカーネルバージョンが正しく指定できていないですね。
ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = /lib/modules/$(shell uname -r)/build
(省略)
LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
調べてみたところ、$()はバッククオートと同様の記法でした。(ただしコマンドの標準出力のみを変数へ代入)
参考URL: http://shellscript.sunone.me/variable.html#バッククォートの代替機能
shellというコマンドがCentOSに存在しないため、$(shell uname -r)は文字列を返さず、
LINUX_SRC = /lib/modules/$(shell uname -r)/build
-> LINUX_SRC = /lib/modules//build
となっていたようです。(LINUX_SRC_MODULEも同様)
$(shell uname -r)を`uname -r`もしくは$(uname -r)に直せば上手いこと動いてくれます。
それにしてもshellとは一体。。。昔のLinuxには搭載されていたコマンドなのでしょうか。