Introduction

Wi-Fi CSI の検証を行うべく環境を用意する中、開発用の VM があったのでそちらを使うために調査したのでメモ。

How to do?

環境は下記

  • VMware ESXI
    • 8.0.3
  • VM
    • Ubuntu 22.04 LTS
  • USB W-Fi アダプター

1. ESXI で確認

まず、ESXI 側で USB W-Fi アダプターを認識し、パススルーに対応しているかを確認する。
ESXI に SSH でログインし、

1
2
3
4
$ lsusb
Bus 001 Device 001: ID 0e0f:8003 VMware, Inc. Root Hub
Bus 001 Device 002: ID 0781:5583 SanDisk Corp. Ultra Fit
Bus 001 Device 003: ID 0411:0242 BUFFALO INC. (formerly MelCo., Inc.)

USB Arbitrator という、物理的な USB デバイスの接続先を制御(ホスト PC か、ゲスト OS か)するバックグラウンドサービスの状況も確認。

1
2
$ /etc/init.d/usbarbitrator status
usbarbitrator is running

最後にパススルー対象になっているかを確認。

1
2
3
4
5
$ esxcli hardware usb passthrough device list
Bus Dev VendorId ProductId Enabled Can Connect to VM Name
--- --- -------- --------- ------- ------------------------- ----
1 2 781 5583 false no (passthrough disabled) SanDisk Corp. Ultra Fit
1 3 411 242 true yes BUFFALO INC. (formerly MelCo., Inc.)

PCI と違って明示的にパススルーは不要の模様。
ちなみに PCI の場合は下記のようにする。少し面倒。

1
2
3
4
5
6
7
8
9
10
11
$ esxcli hardware pci pcipassthru list
Device ID Enabled
------------ -------
0000:00:19.0 false
0000:00:1a.0 true
0000:00:1b.0 false
0000:00:1d.0 true
0000:03:00.0 true
0000:03:00.1 true
$ lspci | grep 0000:03:00.0
0000:03:00.0 VGA compatible controller: NVIDIA Corporation GM200GL [Quadro M6000 24GB]

2. VM に追加

VM を停止し、設定から その他のデバイスの追加USB デバイス で追加。

VMSetting

VMSetting

VMSetting

3. ドライバを追加

標準ドライバで動かないのでドライバをビルドして追加。
以前、開発メモ その403 Ubuntu 18.04.5 で Wi-Fi USB 子機を使えるようにする で同じようなことをしていたが、使っている OSS のドライバをアクティブなリポジトリのものを採用するよう変更。

rtw88 は 2026 年 5 月でも活発に活動しており、他の類似リポジトリ (rtl8812au とか) はこちらのリポジトリを推奨していたりする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$ sudo apt update && sudo apt upgrade
$ sudo apt install linux-headers-generic build-essential git

$ git clone https://github.com/lwfinger/rtw88
$ cd rtw88
$ sudo dkms install $PWD
Creating symlink /var/lib/dkms/rtw88/0.6/source -> /usr/src/rtw88-0.6

Kernel preparation unnecessary for this kernel. Skipping...

......

rtw_8822cs.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/6.8.0-111-generic/updates/dkms/

depmod.............

$ sudo make install_fw
removed '/lib/firmware/rtw88/rtw8703b_fw.bin'
'tmp/rtw8703b_fw.bin' -> '/lib/firmware/rtw88/rtw8703b_fw.bin'
removed '/lib/firmware/rtw88/rtw8703b_wow_fw.bin'
'tmp/rtw8703b_wow_fw.bin' -> '/lib/firmware/rtw88/rtw8703b_wow_fw.bin'
removed '/lib/firmware/rtw88/rtw8723d_fw.bin'
'tmp/rtw8723d_fw.bin' -> '/lib/firmware/rtw88/rtw8723d_fw.bin'
removed '/lib/firmware/rtw88/rtw8812a_fw.bin'
'tmp/rtw8812a_fw.bin' -> '/lib/firmware/rtw88/rtw8812a_fw.bin'
removed '/lib/firmware/rtw88/rtw8814a_fw.bin'
'tmp/rtw8814a_fw.bin' -> '/lib/firmware/rtw88/rtw8814a_fw.bin'
removed '/lib/firmware/rtw88/rtw8821a_fw.bin'
'tmp/rtw8821a_fw.bin' -> '/lib/firmware/rtw88/rtw8821a_fw.bin'
removed '/lib/firmware/rtw88/rtw8821c_fw.bin'
'tmp/rtw8821c_fw.bin' -> '/lib/firmware/rtw88/rtw8821c_fw.bin'
removed '/lib/firmware/rtw88/rtw8822b_fw.bin'
'tmp/rtw8822b_fw.bin' -> '/lib/firmware/rtw88/rtw8822b_fw.bin'
removed '/lib/firmware/rtw88/rtw8822c_fw.bin'
'tmp/rtw8822c_fw.bin' -> '/lib/firmware/rtw88/rtw8822c_fw.bin'
removed '/lib/firmware/rtw88/rtw8822c_wow_fw.bin'
'tmp/rtw8822c_wow_fw.bin' -> '/lib/firmware/rtw88/rtw8822c_wow_fw.bin'

$ sudo cp rtw88.conf /etc/modprobe.d/

# セキュアブートを利用している環境
$ sudo mokutil --import /var/lib/shim-signed/mok/MOK.der

$ sudo reboot