2013-08-21

Planex GW-450Dをlinuxで使う

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行目あたりに書いてあるので参考にする。

2 件のコメント:

  1. こんにちは。

    偶然のコメントに申し訳ございません。
    マラットと申します。

    このマニュアルによってドライバーをコンパイルできました。大変助かりました。ありがとうございます。

    ただ、ra0を見えたが、access pointにどうしてもつながりません。

    wpa_supplicantを使いたいので、/etc/Wireless/RT2870STA/RT2870STA.datのなかで
    SSID, ChanneltとEncrypTypeを空にして、AuthMode=WPAにしました。

    でも、iwconfigによるとESSIDは設定にならないし、APに接続できないようです。

    どうすれば、debug出来るのでしょうか?

    よろしくお願いします。

    返信削除
  2. コメントありがとうございます。一応、チェックする項目を追記してみました。
    これでつながらないと、後はNetworkManagerの問題なのではないかと思います。 参考にならなかったらすいません。

    返信削除