無線LAN子機 DIZA100をRaspberry Piから使う

最近はUSBで接続する802.11ac対応の無線LAN子機が安くなっています。特にAmazonで発売されている [DIZA100](https://www.amazon.co.jp/dp/B074CWPVRY)は通常でも1,700円程度で購入でき、安定して使うことができるため高評価となっています。
ただ一つの問題はドライバーがOSの標準で入っていないため、添付のCDからインストールする必要があります。最近はCDドライブがついていないPCも多いため、インストール方法に苦慮する人も多いのではないでしょうか（自分もそうでした）。
この手順ではインターネットからドライバをダウンロードし、コンパイルしてドライバとして使用できるまでをまとめたメモになります。

環境
----

- ハードウェア：Raspberry Pi (今回はRaspberry Pi3 MODEL Bを使用)
- 無線LANアダプタ: [DIZA100](https://www.amazon.co.jp/dp/B074CWPVRY)
- OS: Raspbian Stretch

手順
----

### デバイスの状況を確認する

無線LANアダプタを接続して、VendorID / ProductIDを確認します。
dmesgコマンド、またはlsusbコマンドで確認します。

```shell
$ dmesg
[    2.081458] usb 1-1.4: new high-speed USB device number 4 using dwc_otg
[    2.212208] usb 1-1.4: New USB device found, idVendor=0bda, idProduct=0811
[    2.215075] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    2.217871] usb 1-1.4: Product: 802.11ac WLAN Adapter
[    2.220601] usb 1-1.4: Manufacturer: Realtek
```

```shell
$ sudo lsusb -v
Bus 001 Device 004: ID 0bda:0811 Realtek Semiconductor Corp.
Device Descriptor:                                 
  bLength                18                      
  bDescriptorType         1            
  bcdUSB               2.10                        
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0               
  bDeviceProtocol         0                 
  bMaxPacketSize0        64                             
  idVendor           0x0bda Realtek Semiconductor Corp.
  idProduct          0x0811                                             
  bcdDevice            2.00       
  iManufacturer           1 Realtek                 
  iProduct                2 802.11ac WLAN Adapter
(略)
```
VendorIDは`0bda`, ProductIDは`0811`ということがわかりました。

### パッケージのインストール

```bash
$ sudo apt install git raspberrypi-kernel-headers make gcc
```

### ソースのダウンロード

https://github.com/gnab/rtl8812au.git からダウンロードします。
以降の手順はREADME.mdと同等の手順になります。

```bash
$ git clone https://github.com/gnab/rtl8812au.git
$ cd rtl8812au
```

### ビルド設定の変更

デフォルトではIntelのCPU用のドライバをビルドする設定となっていますので、Raspberry PiのCPU用に変更します。

```diff:Makefile
diff --git a/Makefile b/Makefile
index 71d0660..55bce9c 100644
--- a/Makefile
+++ b/Makefile
@@ -50,13 +50,13 @@ CONFIG_EXT_CLK = n
 CONFIG_FTP_PROTECT = n
 CONFIG_WOWLAN = n
 
-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_I386_PC = n
 CONFIG_PLATFORM_ANDROID_X86 = n
 CONFIG_PLATFORM_JB_X86 = n
 CONFIG_PLATFORM_ARM_S3C2K4 = n
 CONFIG_PLATFORM_ARM_PXA2XX = n
 CONFIG_PLATFORM_ARM_S3C6K4 = n
-CONFIG_PLATFORM_ARM_RPI = n
+CONFIG_PLATFORM_ARM_RPI = y
 CONFIG_PLATFORM_MIPS_RMI = n
 CONFIG_PLATFORM_RTD2880B = n
 CONFIG_PLATFORM_MIPS_AR9132 = n
```

### ビルド

ビルドしてドライバ（8812au.ko）を作成します。

```bash
$ make
$ sudo insmod 8812au.ko
```

### インストール

```bash
$ sudo cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
$ sudo depmod
```

### 認識結果の確認

再起動を行い、起動時にドライバが読み込まれていることを確認します。
今回使用したRaspberry Pi3 MODEL Bは内蔵のWiFi（wlan0）があるので、２台目のデバイスであるwlan1が存在することがわかります。

```bash
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether e8:4e:06:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DORMANT group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
```

まとめ
------

本当はDKMSを使用してカーネルのバージョンアップに自動で追従する機能を使用するべきですが、とりあえず使うメモなので今回はここで終了です。