Raspberry Pi に無線LAN USBドングル用8812auドライバーをインストールする

## この記事について  
自分用の構築手順メモです。

基本的に[GitHubで公開されているrepository](https://github.com/aircrack-ng/rtl8812au)のREADMEの手順通りに導入すれば動くのですが、たまに実行する時に嵌って時間を溶かすので備忘録を残します。

## 補足
自分の確認(2022.11.26)した範囲で、2021年10月までは[fars-robotics.net/wifi-drivers](http://downloads.fars-robotics.net/wifi-drivers/8812au-drivers/?C=N;O=D)にbuild済みドライバーを提供下さっている方がいましたが現在は更新されていません。

利用可能な構築方法は多くの記事で紹介されていますが(例えばこちらの[「Ubuntu 22.04のWIFIドライバ設定（rtl8812au）」](https://tek2tech.com/wifi-driver-install-on-ubuntu2204/)など)、2022年2月より本稿執筆点までの期間においては[aircrack-ng@GitHub](https://github.com/aircrack-ng/rtl8812au)で公開されている手順に従うのが一番確実でした。

## 作業環境
 
**Raspberry Pi:** Raspberry Pi 4 Model B Rev 1.2
**OS:** Raspberry Pi OS Lite 64-bitまたは32-bit (Raspbian GNU/Linux 11 (bullseye))
**USB Wifi adapter(NIC):** Archer T2U Nano  

## 導入手順

#### パッケージ導入
Raspberry Pi OSはLiteを使う場合はgitのインストールが必要になります。
```
$ sudo apt install git -y
```
カーネルのソースツリーの外にソースが存在する Linux カーネルモジュールを生成するには[Dynamic Kernel Module Support (DKMS)](https://wiki.archlinux.jp/index.php/Dynamic_Kernel_Module_Support)が必要になります。 
```
$ sudo apt install dkms -y
```
更新して一度再起動します。
```
$ sudo apt update && sudo apt upgrade -y
$ sudo reboot
```

#### 8812au diver source code取得
[aircrack-ng@GitHub](https://github.com/aircrack-ng/rtl8812au)からcloneします。
```
$ git clone -b v5.6.4.2 https://github.com/aircrack-ng/rtl8812au.git
```

#### 依存関係
カーネルソースを取得します。
```
$ cd rtl8812au
$ sudo apt install raspberrypi-kernel-headers -y
$ CURRENT_VER=$(uname -r)
$ sudo ln -s /usr/src/linux-headers-${CURRENT_VER}/arch/arm/ /usr/src/linux-headers-${CURRENT_VER}/arch/armv7l

```
#### Makefile 
プラットフォームをARM architectureに変更します。
```:32bit OS
$ sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile
$ sed -i 's/CONFIG_PLATFORM_ARM_RPI = n/CONFIG_PLATFORM_ARM_RPI = y/g' Makefile
```
```:64bit OS
$ sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile
$ sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile
```
errorが表示された場合は次のコマンドを実行します。
```:32bit OS
$ export ARCH=arm
$ sed -i 's/^MAKE="/MAKE="ARCH=arm\ /' dkms.conf
```
```:64bit OS
$ export ARCH=arm64
$ sed -i 's/^MAKE="/MAKE="ARCH=arm64\ /' dkms.conf
```

#### install/build
```
$ sudo make dkms_install
$ make && sudo make install
```

#### 再起動
```
$ sudo reboot
```

## 確認
Archer T2U Nanoがwlan1でAPとして機能していることが確認できました。

```
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 2357:011e TP-Link AC600 wireless Realtek RTL8811AU [Archer T2U Nano]
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```

```
$ ip a
　　　　　　　　　　　　　　　・
　　　　　　　　　　　　　　　・
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.XX.XXX/24 brd 192.168.XX.255 scope global noprefixroute wlan0
　　　　　　　　　　　　　　　・
　　　　　　　　　　　　　　　・
4: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.XX.XXX/24 brd 192.168.XX.255 scope global noprefixroute wlan1
　　　　　　　　　　　　　　　・
　　　　　　　　　　　　　　　・
```

```
$ iw dev
phy#1
        Interface wlan1
                ifindex 4
                wdev 0x100000001
                addr XX:XX:XX:XX:XX:XX
                ssid TP-Link_XXXX
                type AP
                txpower 19.00 dBm
phy#0
        Unnamed/non-netdev interface
                wdev 0x2
                addr XX:XX:XX:XX:XX:XX
                type P2P-device
                txpower 31.00 dBm
        Interface wlan0
                ifindex 3
                wdev 0x1
                addr XX:XX:XX:XX:XX:XX
                ssid TP-Link_XXXX
                type managed
                channel 40 (5200 MHz), width: 80 MHz, center1: 5210 MHz
                txpower 31.00 dBm
```