Raspberry Pi3(kernel 4.14.70) で PlanexのGW-450Dを使うまで 

#経緯
RasPi3の内蔵Wi-Fiでは802.11acが使えないということで、PlanexのGW-450Dを使ってルーターにpingが通るようしました。ルーターの設定も相まって、かなり苦労したため備忘録および被害者を減らすためにここに書き残します。
大変お世話になったサイトです。この場を借りて、感謝を致します。
[ラズパイ Zero WやRasPi 3B 用に5GHz対応のUSB Wi-Fiアダプタ（GW-450D2）のドライバを作る方法。]
(https://iot-plus.net/make/raspi/build-driver-5ghz-usb-wifi-gw450d2-on-raspbian-stretch/)

[Raspberry Pi 2 で Planex GW-450D を使う（セルフコンパイル）]
(http://labs.beatcraft.com/ja/index.php?Raspberry%20Pi%202%20%A4%C7%20Planex%20GW-450D%20%A4%F2%BB%C8%A4%A6%A1%CA%A5%BB%A5%EB%A5%D5%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB%A1%CB)

[RaspberryPiのファームウェアをダウングレードする](https://sugarsugar.conf.jp/raspberrypi%E3%81%AE%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B)


#環境
RaspberryPi3
kernel : 4.14.70-v7+
OS : stretch

#手順
まずはいつものやつをやってから再起動です。

```
$ sudo apt-get update
$ sudo apt-get -y upgrade
$ sudo reboot
```
ここでカーネルのバージョン確認をします。

```
$ uname -r
4.14.70-v7+
```

ビルドツールとカーネルヘッダーをインストールしましょう。

```
$ sudo apt-get install build-essential raspberrypi-kernel-headers git
```

ちゃんと現在のカーネルのバージョンと同じものがインストールされているか確認しましょう。

```
$ cd /lib/modules
$ ls
4.14.70+    4.14.70-v7+
```

もし``` uname -r ```と違うバージョンが入っている場合、私はカーネルをダウングレードすることで無理やりあわせました

```
$ sudo rpi-update [ハッシュ値]
```
ハッシュ値は下のサイトから目的のバージョンを探し、右側の左矢印が書いているアイコンをクリックすればハッシュ値がコピーされるのでそれを使います。
[https://github.com/Hexxeh/rpi-firmware/commits/master](https://github.com/Hexxeh/rpi-firmware/commits/master)

次にgcc-4.8をいれて優先順位を上げます。gcc-4.9だと出来ないということらしいです。

```
$ sudo apt-get -y install gcc-4.8
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60
```

では確認しましょう。

```
$ gcc --vesion | head -1
gcc (Raspbian 4.8.5-4) 4.8.5
```

うまくいってますね。
ここでやっとドライバーのダウンロードです。
まず、**パソコン**で下のサイトからLinux用をダウンロードします。ラズパイでやるとファイルの中身が空になっており、途中の作業からエラーをはいて動きません。
[GW-450Dのダウンロードサイト](http://www.planex.co.jp/support/download/gw450d/driver_linux.shtml)
ダウンロードしたものを解凍したら、mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2をUSBなどを使ってラズパイにそのファイルを移します。
ホームディレクトリーで展開していきます。

```
$ tar xf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
```

今度は、パッチをあてていきます。ホーム戻って[こちら](https://gist.github.com/moutend/cb35a37297910c99d3e2)をクローンして下さい。

```
$ cd
$ git clone https://gist.github.com/moutend/cb35a37297910c99d3e2 gist
```

カーネルのバージョンが4.14の場合、gist/rt_linux.c.patchを開き11行目を編集します。

修正前

```
+return __vfs_read(osfd, pDataPtr, readLen, &osfd->f_pos)
```

修正後

```
+return kernel_read(osfd, pDataPtr, readLen, &osfd->f_pos)
```

いよいよパッチをあてていきます。

```
$./gist/patch.sh
patching file /home/pi/mt7610u_wifi_sta_v3002_dpo_20130916/os/linux/rt_linux.c
patching file /home/pi/mt7610u_wifi_sta_v3002_dpo_20130916/os/linux/config.mk
patching file /home/pi/mt7610u_wifi_sta_v3002_dpo_20130916/include/os/rt_linux.h
patching file /home/pi/mt7610u_wifi_sta_v3002_dpo_20130916/conf/RT2870STA.dat
patching file /home/pi/mt7610u_wifi_sta_v3002_dpo_20130916/common/rtusb_dev_id.c
Successfully done.
```
成功しました。
makeしてインストールから再起動します。

```
$ cd ~/mt7610u_wifi_sta_v3002_dpo_20130916/
$ make
$ sudo make install
$ sudo reboot
```

#無線LANアダプタを接続
ここで無線LANアダプタを接続します。

```
$ ip a
$ sudo iwlist ra0 scan
```

「ra0」が認識され、5GHzも取得できていることを確認してください。
パッチを当てたらデフォルトとして暗号方式がWPA2PSK、暗号化がAESのルーターであれば下のようにコマンドを打ってあげればネットワークに繋がると思います。最近のルーターはデフォルトでこのような設定になってると思います。なっていなかったら、ルーターの設定を変更してからコマンドを打ってください。

```
$ sudo iwconfig ra0 essid ${SSID} key s:${PASS}
```

しかし不幸なことに、私はオーパーツ級のルーターを使わなければならず、そのルーターの設定は暗号方式は無しで暗号化はWEP64となっていました。それでは、ルーターの設定に合わせていきましょう。
/etc/Wireless/RT2870STA/RT2870STA.dat を開きAuthModeとEncrypTypeを変更します。

```
AuthMode=OPEN
EncryptType=WEP
```

他の設定はmt7610u_wifi_sta_v3002_dpo_20130916/doc/README_STA_usb をみて適宜変更しましょう。
次にwpa_supplicant.conf に認証方式や暗号化方式の設定をします。

```
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
```
開いたら次の通りに設定してみましょう。

```
network={
        identity="str"
        key_mgmt=NONE         
        ssid="your-ssid"
        wep_key0=your-passwd
}
```
 
strは適当に決めて構いません。wep_key0はダブルクォーテーション無しでパスワードを入力して下さい。

#IPアドレスを固定
ここからIPアドレス設定をします。

```
$ sudo vi /etc/dhcpcd.conf
```

開いたらファイルの一番下に自分のしたいIPアドレスなどを入力してみましょう。私の環境の場合、下のようになりました。

```
interface ra0
static routers=192.168.12.254
static domain_name_servers=192.168.12.254
static ip_address=192.168.12.102/24
noipv6
static domain_search=
```

routers : ルーターのIPアドレス
domain_name_servers : ルーターのIPアドレス
ip_address : 自分の設定したいIPアドレス
noipv6 : IPv6の設定したくない時に入力
domain_search : 空欄

ここまで出来たら再起動しましょう。
これで無事に自動接続ができていることでしょうが、そうは問屋が卸さないようです。
ラズパイはブート時のあれこれが苦手らしいです。そういった時は

```
$ sudo vi /var/log/syslog
```

の中身を見てwpa_supplicant や dhcpcd の状況を確認しながら修正をかけましょう。出来たら必ずバックアップを取っておきましょう。(自分に対する戒め)