RaspberryPiにGW-450Dを繋ぐメモ
衝動買いで 5Gz(11ac) の無線LANのルータとドングルを購入したので RaspberryPi で試そうと思ったらえらくハマったのメモ。
購入した製品はこちら。
ルータは 4000円からさらにキャンペーン割引で 3600円と 5GHz 対応の無線LANルータとしては暴安だったので購入。
ドングルはこの機種(GW-450D)が RaspberryPi で動作したとの情報をチラと見たので深く考えず購入。 そしてハマるw
GW-450D の Linux 用ドライバ
Linux用ドライバのソースはチップメーカーから供給されていて Planex のサイトからも落とせるようになっています。
しかし、これを README にしたがってコンパイルしてもエラーになります。
make: *** /lib/modules/3.10.25+/build: No such file or directory. Stop.
これは Rasbian のバイナリイメージにカーネルのヘッダソースが含まれていない為です。
じゃあインストールしてやれば良いかと言うとバージョンの合うパッケージがありません。
$ sudo apt-cache search linux-header
linux-headers-3.10-3-all - All header files for Linux 3.10 (meta-package)
linux-headers-3.10-3-all-armhf - All header files for Linux 3.10 (meta-package)
linux-headers-3.10-3-common - Common header files for Linux 3.10-3
linux-headers-3.10-3-rpi - Header files for Linux 3.10-3-rpi
linux-headers-3.2.0-4-all - All header files for Linux 3.2 (meta-package)
linux-headers-3.2.0-4-all-armhf - All header files for Linux 3.2 (meta-package)
linux-headers-3.2.0-4-common - Common header files for Linux 3.2.0-4
linux-headers-3.2.0-4-rpi - Header files for Linux 3.2.0-4-rpi
linux-headers-3.6-trunk-all - All header files for Linux 3.6 (meta-package)
linux-headers-3.6-trunk-all-armhf - All header files for Linux 3.6 (meta-package)
linux-headers-3.6-trunk-common - Common header files for Linux 3.6-trunk
linux-headers-3.6-trunk-rpi - Header files for Linux 3.6-trunk-rpi
linux-headers-rpi - Header files for Linux rpi configuration (meta-package)
linux-headers-rpi-rpfv - This metapackage will pull in the headers for the raspbian kernel based on
ちなみに linux-headers-3.10-3-rpi をインストールしてビルドしたバイナリは insmod しようとするとバージョンチェックで蹴られます。
$ sudo insmod mt7650u_sta.ko
Error: could not insert module mt7650u_sta.ko: Invalid module format
$ dmesg
[ 375.421162] mt7650u_sta: disagrees about version of symbol module_layout
じゃあ、カーネルのソースを落としてくればと思ったのですが
Git リポジトリには最新の 3.10.37 のソースしかなくバイナリリリースされている
3.10.25 のタグが切られていません。
何の為の Git なのか意味不明なのですがとにかくそういうソース管理のようです。
結論
対処方の結論はこちらの参考サイトに書いてありました。
自分で最新のカーネルをビルドしなおしてそのソースを使えと言うことらしいです。
ドライバのインストールの為にカーネルのビルドが必要というだいぶ時代が逆行した感が有りますがしかたありません。
私の行った手順は参考サイトと微妙に違っているのでメモして置きます。
尚、これは 2014年4月時点 2014-01-07-wheezy-raspbian.zip を前提とした手順です。
準備
$ sudo apt-get update
$ sudo apt-get -y dist-upgrade
$ sudo apt-get -y install gcc make bc screen ncurses-dev
カーネルソース取得
$ wget https://github.com/raspberrypi/linux/archive/rpi-3.10.y.tar.gz
$ wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers
※wget で Module.symvers が取得出来ない場合はブラウザで取得できます。
カーネルのビルド
$ cd /usr/src
$ sudo su
# tar -xvzf ~/linux-rpi-3.10.y.tar.gz
# cd linux-rpi-3.10.y
# cp ~/Module.symvers .
# gzip -dc /proc/config.gz > .config
# make oldconfig
# make clean
# make
# make modules_install
# mkdir boot
# make INSTALL_PATH=/usr/src/linux/boot install
# cp /usr/src/linux/boot/vmlinuz-3.10.37 /boot
# vi /boot/config.txt
kernel=vmlinuz-3.10.37
# ln -s /usr/src/linux-rpi-3.10.y /lib/modules/3.10.37/build
# reboot
…再起動…
$ uname -r
3.10.37 <-- カーネルが更新されて要ることを確認
GW-450Dドライバのビルド
$ unzip gw-450d_driver_linux_v3002.zip
$ cd gw-450d_driver_linux_v3002
$ tar xvjf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
$ cd mt7610u_wifi_sta_v3002_dpo_20130916
$ vi common/rtusb_dev_id.c (コード追加)
USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef MT76x0
{USB_DEVICE(0x2019,0xab31)}, /* GW-450D */ <-- 追加
$ vi os/linux/config.mk (設定変更)
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
$ make
$ sudo make install
$ sudo rm -r /etc/Wireless/RT2860STA
$ sudo mkdir -p /etc/Wireless/RT2870STA
$ sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
$ sudo insmod /lib/modules/3.10.37/kernel/drivers/net/wireless/mt7650u_sta.ko
$ iwconfig ra0
ra0 Ralink STA ESSID:"11n-AP" Nickname:"MT7610U_STA"
Mode:Auto Frequency=2.412 GHz Access Point: Not-Associated
Bit Rate:1 Mb/s
RTS thr:off Fragment thr:off
Link Quality=100/100 Signal level:0 dBm Noise level:0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
iwconfig が以下のようになる場合はビルドに失敗しています。
$ iwconfig ra0
ra0 No such device
ローカル環境の設定
環境毎に設定値は違います。
$ sudo vi /etc/modules (設定追加)
mt7650u_sta
$ sudo vi /etc/Wireless/RT2870STA/RT2870STA.dat (設定変更)
SSID=
AuthMode=WPA2PSK <-- ルータの設定に合わせる
EncrypType=AES <-- ルータの設定に合わせる
$ sudo vi /etc/network/interfaces (設定追加)
allow-hotplug ra0
auto ra0
iface ra0 inet dhcp
wpa-ssid “ルータのSSID”
wpa-psk “ルータのパスワード”
# sudo reboot
…再起動…
$ iwconfig ra0
ra0 Ralink STA ESSID:"ルータのSSID" Nickname:"MT7610U_STA"
Mode:Managed Frequency=5.22 GHz Access Point: 00:11:22:33:44:55
Bit Rate=135 Mb/s
RTS thr:off Fragment thr:off
Link Quality=100/100 Signal level:-49 dBm Noise level:-68 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
$ ifconfig ra0
ra0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:192.168.0.201 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1618 errors:0 dropped:0 overruns:0 frame:0
TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468584 (457.6 KiB) TX bytes:9181 (8.9 KiB)
ifconfig で DHCP のアドレスがちゃんと振られていれば接続完了です。
