Raspberry Pi Zero2Wで6GHz帯域を使用する

## 概要
Raspberry Pi Zero2Wにドライバを入れて6GHz帯域のAPに接続してみました。

## 環境
・Raspberry Pi Zero 2 W
・Ubuntu 22.04 Server
・Archer TXE70UH
・32GB SanDisk Extreme microSDXC™ UHS-I CARD

## 手順
### ドライバの導入
まずは、パッケージをアップデートし、NetworkManagerを入れます。
```
sudo apt update
sudo apt install -y network-manager
```
次に、Wi-Fiアンテナのドライバを入れます。
このとき公式のものを入れると、「Archer TXE70UH」用に修正をしないといけないため、修正済みのリポジトリを公開するのでそれを使用してください。
※私の環境だと国コードを日本にすると2.4GHz帯域しか認識しなかったためアメリカにしています。
```
cd ~/
git clone https://github.com/Hissa-K/TXE70UH
cd TXE70UH
```
次に入れたドライバをコンパイル及びインストールします。
しかし、そのままではメモリが足りないので、SDカードの空き容量を使用してスワップ領域を作成することでこれを回避します。
```
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```
以下のコマンドでスワップ領域が生成されたことを確認できます。
```
free -h
```
また、makeコマンドを実行する環境を以下のコマンドで導入します。
```
sudo apt install build-essential module-assistant
sudo m-a prepare
```
ドライバをクロスコンパイル及びインストールします。
クロスコンパイルにかなり時間がかかるので気長に待ちましょう。
```
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
sudo make install
```
入れたドライバのモジュールを有効化します。
```
sudo modprobe 8852cu
```
`lsmod`コマンドで有効化されているか確認してみてください。
これでドライバの導入は終了です。

### ネットワーク設定
Ubuntu側が6GHz帯域の許可をしているかを確認しましょう。
`iw`コマンドで確認できます。
```
sudo apt install iw
iw reg get
```
このコマンドで対応している周波数帯域が表示できます。
日本で使用できる帯域である「5,925MHz～6,425MHz」が含まれているか確認してください。
表示されない場合は、wpa_supplicantが古いバージョンのままだと6GHz帯域のAPに接続できないので、新しいものと差し替えます。
```
cd ~/
git clone git://w1.fi/hostap.git
cd hostap/wpa_supplicant
sudo apt install libssl-dev libdbus-1-dev libnl-genl-3-dev libnl-route-3-dev
cp defconfig .config
make
sudo make install
sudo cp -f wpa_supplicant /usr/sbin/.
sudo chmod 755 /usr/sbin/wpa_supplicant
```


もし、対応していない場合国を設定し直すと治ります。
以下のコマンドで国を設定できます。
```
sudo iw reg set JP
```

### ネットワーク構成ファイルの編集
まずは、デバイス名を取得します。
WiFiアダプターを接続し、デバイス名を確認します。
```
ip link show
```
 wlx242fdから始まるものがWiFiアダプター名です。
 この名前を使用するのでコピー等で保存しておくことをオススメします。

テキストエディタで接続するアクセスポイントをネットワーク構成ファイルに追記します。
テキストエディタは何でもいいですが、ここではnanoを使います。
既存のファイルを壊さないためにも、新たに設定ファイルを作成します。
```
cd /etc/netplan
sudo nano 99_config.yaml 
```
ファイルを6GHz帯域のAPに接続できるよう編集します。
「アダプター名」、「SSID・パスワード」は変更してください。
今後の利便性を加味して、ここで静的IPアドレスにすることをオススメします。
``` 99_config.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    wifis:
        renderer: NetworkManager
        wlxxxxxxxxxxxxx:
            access-points:
                SSID:
                    auth:
                        key-management: sae
                        password: password
            dhcp4: false
            addresses:
                - 192.168.1.xxx/24
            routes:
                - to: 0.0.0.0/0
                  via: 192.168.1.1
            nameservers:
                addresses:
                    - 8.8.8.8
                    - 8.8.4.4
            optional: true
```
ファイルの権限を変更します。
```
sudo chmod 600 /etc/netplan/99_config.yaml
```
最後に変更を反映させます。
```
sudo netplan apply
```
起動時に接続待ちが発生して起動が遅くなるので以下のコマンドで設定を変更します。
```
systemctl disable systemd-networkd-wait-online.service
systemctl mask systemd-networkd-wait-online.service
```
ここで、再起動をかけて変更を反映させます。
```
sudo reboot
```

ここまですると、6GHz帯域のAPに接続できるはずです！
お疲れ様でした。