環境與目標
先確認目前核心版本,因為這張卡的 USB ID 2001:3329 在較舊KERNEL並沒有免驅的能力。
像我的Debian系統還是跑KERNEL 6.1版本,所以需要另外編譯 lwfinger/rtw88 backport。
uname -r
網卡:D-Link AC13U A1 USB無線網卡
晶片:Realtek RTL8822CU
USB ID:2001:3329
目標模組:rtw_8822cu
編譯核心模組需要 git、build-essential、dkms、Kernel headers,以及 Realtek 韌體。
安裝firmware-realtek套件,目的是給 Realtek 無線晶片用的韌體辨識用;若沒有韌體時,即使驅動載入,也可能無法正常掃描或連線。
sudo apt update
sudo apt install -y git build-essential dkms linux-headers-amd64 firmware-realtek iw wireless-regdb network-manager
抓取 rtw88 原始碼
cd ~/Downloads
git clone https://github.com/lwfinger/rtw88.git
cd rtw88/
這個GIT專案是把核心的 rtw88 Wi‑Fi 5 驅動 backport 到舊核心,並且包含 RTL8822CU 與 D-Link AC13U A1 的 2001:3329 支援。
只編譯需要的模組給 USB 版的 RTL8822CU,不需要 SDIO 版的 8723B/8723BS,也不需要 8703B、8723CS。
另外,上述這些模組在 Debian 12 的 6.1 headers 下會遇到不相容問題,先註解掉可以消滅編譯過程的錯誤訊息。
cp Makefile Makefile.bak
sed -i -E '/rtw_(8703b|8723b|8723bs|8723cs)/s/^/#/' Makefile
接著處理 FIELD_PREP_CONST()。這個巨集宣告是較新版的KERNEL才有的支援,在我的Debian 12 的 6.1 headers 沒有支援的關係,所以先暫把它換成舊核心可用的 FIELD_PREP() 宣告方式。
grep -rl 'FIELD_PREP_CONST' . | xargs sed -i 's/FIELD_PREP_CONST(/FIELD_PREP(/g'
確認 Makefile 裡的舊晶片模組都已被註解:
grep -nE 'rtw_(8703b|8723b|8723bs|8723cs)' Makefile
預期會看到這些行開頭都有 # 註解掉,例如:
#obj-m += rtw_8703b.o
#obj-m += rtw_8723b.o
#obj-m += rtw_8723bs.o
#obj-m += rtw_8723cs.o
編譯與安裝
先清掉前一次可能殘留的編譯結果,再重新編譯:
make clean
make
編譯成功的重點是:
最後沒有 Error 訊息
有產生 rtw_core.ko
有產生 rtw_usb.ko
有產生 rtw_8822cu.ko
若遇到類似 Skipping BTF generation … due to unavailability of vmlinux 只是警告,不影響驅動使用。
安裝模組並更新模組相依資料庫:
sudo make install
sudo depmod -a
注意:這個 backport 的模組名稱是 rtw_8822cu,不是上游核心的 rtw88_8822cu,所以載入時不要打錯。
sudo modprobe rtw_8822cu
驗證驅動是否載入
先看模組有沒有載入:
lsmod | grep rtw
成功時應該會看到類似:
rtw_8822cu
rtw_usb
rtw_8822c
rtw_core
再看核心訊息,確認 USB ID 2001:3329 已被驅動啟用:
sudo dmesg | grep -iE 'rtw|8822cu|2001:3329' | tail -50
接著確認是否已建立無線介面:
ip link
如果 iw 不在 PATH路徑,可以先確認位置:
command -v iw
ls -l /usr/sbin/iw /usr/bin/iw 2>/dev/null
/usr/sbin/iw dev
成功時,iw dev 應該會出現無線介面,例如 wlx_______ 或 wlan0。
用 NetworkManager 連線
先掃描附近 Wi‑Fi:
nmcli device wifi list
找到的熱點,選擇連線時把 SSID 和密碼換成自己的:
nmcli device wifi connect "你的SSID" password "你的WiFi密碼"
確認裝置狀態與 IP:
nmcli device status
ip addr show wlx_______ # <-- 例如 wlx8876b9e6383d 或 wlan0#
ping -c 4 8.8.8.8
這次成功後,nmcli device status 會看到兩個相關裝置:
| 裝置 | 類型 | 意義 |
| ----------------------- | -------- | ------------------------------------------------------------ |
| wlx | wifi | 實際的 Wi‑Fi 網卡介面 |
| p2p-dev-wlx | wifi-p2p | NetworkManager/wpa_supplicant 建立的 Wi‑Fi Direct 控制介面,不是第二張網卡。 |
設定開機自動載入
手動 modprobe 成功後,重開機不一定會自動載入,所以建立開機載入設定:
echo -e "rtw_core\nrtw_usb\nrtw_8822cu" | sudo tee /etc/modules-load.d/rtw88-8822cu.conf
重開機後再驗證一次:
lsmod | grep rtw
nmcli device status
這次遇到的兩個狀況:
1. FIELD_PREP_CONST 編譯錯誤
Debian 12 的 6.1 headers 沒有 FIELD_PREP_CONST(),所以 make 會失敗。解法是把原始碼裡的 FIELD_PREP_CONST( 全部換成 FIELD_PREP(。
grep -rl 'FIELD_PREP_CONST' . | xargs sed -i 's/FIELD_PREP_CONST(/FIELD_PREP(/g'
2. 不需要的 SDIO 模組也一起編譯
rtw_8723bs 是 SDIO 版 RTL8723BS,跟 USB 的 AC13U 無關,但它需要較新核心的 SDIO ID 定義,會在 Debian 12 的 6.1 headers 下編譯失敗。
所以直接把 rtw_8703b、rtw_8723b、rtw_8723bs、rtw_8723cs 從 Makefile 註解掉,只保留這張 USB RTL8822CU 需要的模組。
後續注意
這是自行編譯、未簽署的核心模組,dmesg 出現 module verification failed ... tainting kernel 不代表失敗。
若系統有啟用 Secure Boot,未簽署模組可能會被擋下;可用 mokutil --sb-state 檢查。
核心更新後,外部編譯的模組通常要重新編譯安裝,否則可能會失效。
若之後換到核心 6.17 以上的系統,這張 AC13U A1 有機會直接免驅,應先插入測試,不要急著重跑這套編譯流程。
快速流程步驟:
uname -r
cd ~/Downloads
git clone https://github.com/lwfinger/rtw88.git
cd rtw88/
cp Makefile Makefile.bak
sed -i -E '/rtw_(8703b|8723b|8723bs|8723cs)/s/^/#/' Makefile
grep -rl 'FIELD_PREP_CONST' . | xargs sed -i 's/FIELD_PREP_CONST(/FIELD_PREP(/g'
grep -nE 'rtw_(8703b|8723b|8723bs|8723cs)' Makefile
make clean
make
sudo make install
sudo depmod -a
sudo modprobe rtw_8822cu
lsmod | grep rtw
sudo dmesg | grep -iE 'rtw|8822cu|2001:3329' | tail -50
ip link
command -v iw
ls -l /usr/sbin/iw /usr/bin/iw 2>/dev/null
/usr/sbin/iw dev
nmcli device wifi list
nmcli device wifi connect "你的SSID" password "你的WiFi密碼"
nmcli device status
ip addr show wlx_______
ping -c 4 8.8.8.8
echo -e "rtw_core\nrtw_usb\nrtw_8822cu" | sudo tee /etc/modules-load.d/rtw88-8822cu.conf
lsmod | grep rtw
nmcli device status
這次能成功的重點是:USB 模式已切換成 2001:3329、lwfinger/rtw88 backport 支援 RTL8822CU、並針對 Debian 12 的 6.1 核心排除不需要的 SDIO 模組與修掉 FIELD_PREP_CONST() 相容性問題。
Be the first to reply