Planex GW-450Dは、 mt7650u_sta というチップが搭載されているらしいが、認識では RT2870で認識されている。
Windowsでは問題ないが、linuxだとアクセスポイントがステルスの場合、接続できなかったので注意!!
Planexのサイトでは、動作無保証ながら、linux用のドライバを公開している。こういうサービスはありがたい。
日本のメーカーは、目先の利益に繋がらないからと、チップメーカーが提供しているのにもかかわらず、linuxのドライバ提供を無視してきたが、地道にやっておけばAndroidへの対応などのノウハウが社内に蓄積し、今のようなスマホ惨敗の状態に陥らなくてすんだのではなかったかと思う。
Planex提供のドライバは古いので、チップ提供の
本家から最新のドライバを取得する。現時点での最新のものは
MT7610U USB 09/16/2013 V3.0.0.2
となっている。
# cd /usr/local/src
# copy mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 .
# tar jxfv mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 .
# cd mt7610u_wifi_sta_v3002_dpo_20130916
Planexの ベンダーIDと製品IDを、ドライバソースに反映
# cd common
# vi rtusb_dev_id.c
/* module table */
USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef MT76x0
{USB_DEVICE(0x2019,0xab31)}, <========== これを追記
{USB_DEVICE(0x148F,0x7610)}, /* MT7610U */
{USB_DEVICE(0x0E8D,0x7610)}, /* MT7610U */
{USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7630, 0xff, 0x2, 0xff)}, /* MT7630U */
{USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7650, 0xff, 0x2, 0xff)}, /* MT7650U */
#endif
{ }/* Terminating entry */
};
ネットワークマネージャを使うのならば、os/linux/config.mk を編集
# cd os/linux
# vi config.mk
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
include/os/rt_linux.h の290行目くらい? を編集する
---------------------------------------
typedef struct file* RTMP_OS_FD;
typedef struct _OS_FS_INFO_
{
int fsuid; <--- これを以下に書き換え
kuid_t fsuid;
int fsgid; <----これを以下に書き換え
kgid_t fsgid;
mm_segment_t fs;
} OS_FS_INFO;
#define IS_FILE_OPEN_ERR(_fd) ((_fd == NULL) || IS_ERR((_fd)))
--------------------------------------------------
ここからコンパイル
openSUSEの場合だと、あらかじめ
- kernel-source
- kernel-devel
- kernel-syms
をインストールしておかないとビルドできない。
# make
※ READMEによると、 インストールは、make install はせずに、手動でコピーしてる
# chmod 644 mt7650u_sta.ko
# cp os/linux/mt7650u_sta.ko /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/
ドライバーが使う設定ファイルをセットする
#mkdir -p /etc/Wireless/RT2870STA
# cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
# vi /etc/Wireless/RT2870STA/RT2870STA.dat
編集箇所だけを上書きする事
CountryRegion=1
CountryRegionABand=7
CountryCode=JP
SSID=
NetworkType=Infra
WirelessMode=5
Channel=0
<-------自動でチャンネル設定してくれる
AuthMode=WPA2PSK
EncrypType=AES
WPAPSK=
<--- NetworkManageを使うので、ここは何も入れない
/etc/modprobe.d/ 以下で、 99-local.conf に
alias ra0 mt7650u_sta
を追記した。
(50-mt7650u_sta.conf ファイルを作成して、その中に これを 書けばよいのかもしれない。)
NetworkManager での設定
/etc/NetwrokManger/NetworkManager.conf
[main]
plugins=ifcfg-suse,keyfile,
no-auto-default=GW-450DのMACアドレスを記述する
とりあえず、これで NetworkManagerから接続できている。
但し、アクセスポイントがステルスの場合は、何故だか接続に失敗するのでステルスは解除してやる。
/>/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/>
自分のブログにコメントが付くとは思っていなかったのだが、上の内容では接続できないというコメントをもらったので、追記・・・・・。
ドライバーのコンパイル後、以下のようにモジュールディレクトリ下 に、my7650u_sta をコピーした。
# chmod 644 mt7650u_sta.ko
# cp os/linux/mt7650u_sta.ko /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/
この時点で、
/sbin/insmod /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/mt7650u_sta.ko
してやることで、モジュールの読み込みを行う。そうすると、
#lsmod | grep mt
mt7650u_sta 925764 1
usbcore 206447 5 mt7650u_sta,usbhid,ehci_pci,uhci_hcd,ehci_hcd
のような結果が表示されるハズだ。
#iwlist ra0 scanning
して GW-450Dのランプがピコピコするのを確認する。
念の為に、mt7650u_staが起動時に読み込まれるように、
/etc/init.d/boot.local
に
# for GW-450D
/sbin/insmod /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/mt7650u_sta.ko
の記述を追記し、再起動後に、もう一度 iwlist コマンドをチェックしてみる。
****************************************************
尚、 /etc/Wireless/RT2870STA/RT2870STA.dat のファイルの暗号化条件には、
AuthMode= 指定可能値 "WEPAUTO", "OPEN", "SHARED", "WPAPSK", "WPA2PSK", "WPANONE"
EncrypType= 指定可能値 "NONE", "WEP", "TKIP", "AES"
となっている。詳細はドライバーtarballのREADME_STA_usbの282行目あたりに書いてあるので参考にする。