Raspberry Pi CM5 能否使用 USB Wi-Fi 适配器?
测试 AC600/AC1300 并安装驱动程序

树莓派 CM5 提供内置 Wi-Fi 的机型。不过,人们常说其板载天线的无线性能相对较弱。为了验证外接 USB Wi-Fi 适配器是否能提供更好的替代方案,我们决定进行测试。

Raspberry Pi 5 和 CM5 系列面临的另一个挑战是,许多 USB Wi-Fi 适配器无法开箱即用。在 Raspberry Pi 4 上,这种情况很少发生,因此当现有适配器无法被识别时,许多用户可能会感到惊讶。

在本文中,我们测试了 USB 2.0 和 USB 3.0 两种 Wi-Fi 适配器。尽管这两款产品采用的瑞昱(Realtek)芯片组不同,但我们将对比它们的性能,并说明如何安装所需的 Linux 驱动程序。

测试环境

测试环境如下所示。

产品:PL-R5 工业级树莓派
型号:树莓派计算模块 5 Rev 1.0
CPU 架构:ARM64 (aarch64)
操作系统:Debian GNU/Linux 12 (Bookworm)
内核:6.12.62+rpt-rpi-v8

本次评测中使用的Wi-Fi适配器是TP-Link AC1300和AC600。这两款产品均支持2.4 GHz和5 GHz的Wi-Fi网络。

AC600 是一款 USB 2.0 设备,而 AC1300 则支持 USB 3.0 连接。

除了规格之外,这两款适配器的尺寸和外观几乎完全相同。

AC600 据宣传兼容 Windows 和 macOS,而 AC1300 则仅官方支持 Windows。这两款产品均附带驱动程序光盘,但均未声称兼容 Linux。

技术规格

  • AC600:1个数据流(1×1),最高433 Mbps(理论值)
  • AC1300:2个数据流(2×2),最高866 Mbps(理论值)

驱动程序兼容性

所测试的两款适配器均未正式支持 Linux,且制造商未提供任何官方的 Linux 驱动程序。

在使用 Linux(包括 Raspberry Pi OS)时,如果标准内核不支持该适配器,您可能需要查找并安装兼容的第三方驱动程序。

驱动程序的兼容性取决于多个因素,包括内核版本、无线芯片组、CPU 架构和操作系统。

其中,无线芯片组最为重要。

第一步是确认USB设备已被检测到,并识别其使用的芯片组。安装正确的驱动程序至关重要,因为如果没有驱动程序,适配器将无法工作。

识别芯片组(AC600 和 AC1300)

在执行以下命令之前,请将 Wi-Fi 适配器插入 USB 端口。我们首先对 AC600 进行了测试。

由于这是一个USB设备,识别它的最简单方法是使用lsusb 命令。

lsusb
Bus 004 Device 004: ID 2357:0120 TP-Link Archer T2U PLUS [RTL8821AU]

该适配器已被成功识别为 USB 设备,芯片组也被明确识别为Realtek RTL8821AU。USB 供应商 ID 和产品 ID(2357:0120 )也证实了这是一台 TP-Link 设备。

接下来,我们使用ip link 命令检查了可用的网络接口。

由于测试系统未配备板载 Wi-Fi,成功识别的适配器应自动创建一个wlan0 接口。然而,并未出现任何无线接口。

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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 2c:cf:67:ba:f9:8e brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether c8:ac:35:05:00:02 brd ff:ff:ff:ff:ff:ff

尽管 USB 设备本身已被正确检测到,但标准的树莓派内核并未创建无线网络接口,这表明该适配器不受默认驱动程序支持。

AC1300

我们对 AC1300 重复了相同的操作,并确定其芯片组为RTL8822BU

lsusb 命令报告的USB ID为2357:0138 ,但未显示芯片组名称。因此,我们使用sudo dmesg | grep -i rtw 检查了内核日志(也可以通过lsusb -t 识别芯片组)。

Bus 003 Device 004: ID 2357:0138 TP-Link 802.11ac NIC

查找兼容的驱动程序

幸运的是,许多 USB Wi-Fi 适配器都有由社区开发的 Linux 驱动程序。由于其他用户也遇到过同样的问题,通常只需稍加搜索,就能找到合适的驱动程序。

不过,在另寻他法之前,不妨先检查一下Linux软件包仓库中是否已有兼容的驱动程序。

我们首先通过apt search 搜索了 Raspberry Pi OS 软件包仓库。

遗憾的是,没有适用于 RTL8821AU 芯片组的驱动程序包。搜索结果中出现了诸如rtw88_8821curtw88_8821certw88_8821c 等包,但均不适用于 RTL8821AU。

由于在apt 上找不到合适的软件包,我们转而求助于 GitHub。

检索条件如下:

  • RTL8821AU (AC600)
  • RTL8822BU (AC1300)
  • Linux 内核 6.12
  • 树莓派操作系统《书虫》
  • ARM64

理想情况下,该驱动程序还应支持DKMS(动态内核模块支持)

  • 使用 DKMS:每当内核更新时,驱动程序都会自动重新构建。
  • 如果没有 DKMS:每次内核更新后,都必须手动重新编译驱动程序。

如果没有 DKMS 的支持,安装新内核的常规操作系统更新可能会导致 Wi-Fi 适配器无法工作。

如果设备已连接键盘和显示器,这可能不是什么大问题,但对于难以进行物理访问的远程系统而言,这可能会成为一个严重的问题。

我们选择的 GitHub 仓库

在搜索 GitHub 时,我们发现了一个推荐某款驱动程序的仓库。我们亲自试用后,发现它运行得非常顺利。

使用的代码库: https://github.com/lwfinger/rtw88

这是一个下游仓库,专门用于开发、测试和维护 Realtek rtw88 Wi-Fi 5 芯片组系列的驱动程序。

换句话说,它将针对 Linux 6.13 开发的最新wireless-next(主线)代码回溯移植到较旧的内核中,使其与运行内核 6.12 的 Raspberry Pi OS Bookworm 兼容。

支持的设备列表中还包含了我们之前已确认的两款芯片组——RTL8821AURTL8822BU——因此我们确信这是正确的驱动程序。

PCIe: RTL8723DE, RTL8812AE, RTL8814AE, RTL8821AE, RTL8821CE, RTL8822BE, RTL8822CE
SDIO: RTL8723CS, RTL8723DS, RTL8821CS, RTL8822BS, RTL8822CS
USB : RTL8723DU, RTL8811AU, RTL8811CU, RTL8812AU, RTL8812BU, RTL8812CU
USB : RTL8814AU, RTL8821AU, RTL8821CU, RTL8822BU, RTL8822CU

更棒的是,该代码库完全支持 DKMS,因此是长期维护的绝佳选择。

安装驱动程序

接下来,我们将安装驱动程序。

以下安装步骤遵循lwfinger/rtw88 中的 README 文件中的说明,适用于 Raspberry Pi OS。

安装所需软件包

在 Raspberry Pi OS 上,请先安装所需的构建工具。

尽管 Bookworm 已经包含了大部分必需的环境,但建议运行以下命令以确保所有内容均已安装。

sudo apt install -y raspberrypi-kernel-headers build-essential git

该代码库使用 DKMS,而 Raspberry Pi OS 默认并未安装该软件,因此请一并安装。

sudo apt install dkms

安装 rtw88 驱动程序

克隆仓库,安装 DKMS 驱动程序,安装所需的固件,最后将配置文件复制到相应位置。

git clone https://github.com/lwfinger/rtw88.git

cd rtw88
sudo dkms install $PWD

sudo make install_fw
sudo cp rtw88.conf /etc/modprobe.d/

重启系统后,请运行ip link 命令,以确认无线接口是否已创建。

现在您应该看到wlan0wlan1 中的一个。

连接 Wi-Fi

驱动程序安装成功后,只需配置已检测到的无线接口(wlan0 ),即可连接到您的 Wi-Fi 网络。

sudo nmcli dev wifi connect "5GHz SSID" password "Wi-Fi Password"

如果该命令显示连接已成功激活,则该适配器已准备就绪,可以使用了。

您可以使用以下命令断开连接,稍后再重新连接。

# Disconnect
sudo nmcli dev wifi disconnect wlan0

# Reconnect
sudo nmcli con up "SSID"

如果您使用的是树莓派桌面环境,还可以通过顶部菜单栏中的网络图标连接或断开 Wi-Fi 连接。

检查信号强度(AC600)

在确认适配器已成功连接后,我们对其无线性能进行了评估。

为了检查信号质量,我们使用了以下命令。

iw dev wlan0 link
Connected to XX:XX:XX:XX:XX:XX (on wlan0) # sample
    SSID: secret # sample
    freq: 5220
    RX: 1846814 bytes (8763 packets)
    TX: 370914443 bytes (48765 packets)
    signal: -40 dBm
    rx bitrate: 390.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 1
    tx bitrate: 433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1

以下这三行最为重要。

signal: -40 dBm
rx bitrate: 390.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 1
tx bitrate: 433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1

就信号强度而言,数值越接近0 dBm,信号就越强。

  • -30 至 -45 dBm:极佳
  • -50 至 -67 dBm:良好
  • 低于 -70 dBm:信号微弱

我们的测试结果为-40 dBm,表明无线信号非常良好。

符号VHT-MCS 9 80MHz VHT-NSS 1 也提供了有用的信息。

  • VHT表示 Wi-Fi 5(802.11ac)传输模式。
  • MCS 9是所支持的最高调制与编码方案。
  • 80 MHz是信道带宽。
  • VHT-NSS 1表示单个空间流(一个天线)。AC1300 应报告VHT-NSS 2,表示两个空间流。

(VHT 代表“超高速吞吐量”。)

无线标准通常表示如下:

  • 802.11nHT(Wi-Fi 4)
  • 802.11acVHT(Wi-Fi 5)
  • 802.11axHE(Wi-Fi 6)

随着Wi-Fi技术的不断迭代,信道带宽也随之增加。

  • 20 MHz
  • 40 MHz
  • 80 MHz ← 本文测试的适配器所使用的频率
  • 160 MHz

将 AC600 连接到 USB 3.0 端口

接下来,我们将仅官方支持 USB 2.0 的 AC600 连接到 USB 3.0 接口进行了测试。

重启系统后,我们将适配器插到了USB 3.0接口上,并再次执行了相同的命令。

iw dev wlan0 link 的输出结果如下。

signal: -42 dBm
rx bitrate: 351.0 MBit/s VHT-MCS 8 80MHz VHT-NSS 1
tx bitrate: 433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1

与 USB 2.0 测试相比,接收信号强度略有下降,而接收链路速率则从390.0 Mbit/s降至351.0 Mbit/s

但在实际使用中,无论是在 USB 2.0 端口还是 USB 3.0 端口上使用该适配器,几乎都感觉不到任何明显差异。

检查信号强度(AC1300)

接下来,我们将支持 USB 3.0 的 AC1300 连接到 USB 3.0 接口进行测试。

由于驱动程序已经安装完毕,因此无需任何额外配置,适配器便被自动检测到了。

我们再次检查了无线链路信息。

signal: -40 dBm
rx bitrate: 780.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 2
tx bitrate: 866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2

信号强度为-40 dBm,表明连接状况极佳,与AC600相当。

不出所料,协商得出的链路速率(780.0 / 866.7 Mbit/s)明显高于 AC600 的速率。

信道带宽仍为80 MHz,而适配器正确报告了VHT-NSS 2,表明存在两个空间流。

将 AC1300 连接到 USB 2.0 端口

与 AC600 一样,我们重启了系统,并将 AC1300 连接到 USB 2.0 端口。

signal: -42 dBm
rx bitrate: 702.0 MBit/s VHT-MCS 8 80MHz VHT-NSS 2
tx bitrate: 866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2

信号强度略微下降至-42 dBm,而协商的接收链路速率则从780.0 Mbit/s降至702.0 Mbit/s

端口选择几乎没有实际影响

尽管 AC600 是为 USB 2.0 设计的,而 AC1300 支持 USB 3.0,但无论连接到哪个 USB 端口,这两款适配器都能正常工作。

在日常使用中,无论是从性能还是易用性来看,USB 2.0 接口与 USB 3.0 接口之间的差异几乎难以察觉。

信号强度也会根据开机后进行测量的时间不同而略有波动。

实际上,USB 端口的物理位置以及周围的电气噪声可能比 USB 接口本身的影响更大。

虽然每款适配器连接到其专用的USB端口时性能略有提升,但除非首选的端口已被占用,否则几乎没有理由使用其他端口。

吞吐量测试

接下来,我们使用iperf3 测量了实际的网络吞吐量。

我们在 PL-R5 和另一台 Mac 上都安装了iperf3 ,并将那台 Mac 启动到了服务器模式。

brew install iperf3

iperf3 -s

在树莓派上安装了iperf3 后,我们使用Mac的IP地址运行了客户端。

iperf3 -c <Mac IP address>

iperf3 测试结果

Mac(接收端)一侧的最后一行显示了测得的吞吐量。

# AC1300
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   359 MBytes   301 Mbits/sec    0             sender
[  5]   0.00-10.02  sec   358 MBytes   300 Mbits/sec                  receiver
# AC600
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   163 MBytes   137 Mbits/sec    0             sender
[  5]   0.00-10.03  sec   160 MBytes   134 Mbits/sec                  receiver

AC1300的传输速率约为300 Mbit/s,而AC600的传输速率约为134 Mbit/s

尽管这些数值低于其理论最大链路速率(分别为866.7 Mbit/s433.3 Mbit/s),但它们代表了实际的应用层吞吐量。

为了获得更准确的测量结果,您可以使用-P 4 选项,以四个并行流的方式运行iperf3

iperf3 -c <IP address> -P 4
# AC600

[ ID] Interval           Transfer     Bitrate         Retr
[SUM]   0.00-10.00  sec   161 MBytes   135 Mbits/sec    0             sender
[SUM]   0.00-10.03  sec   154 MBytes   129 Mbits/sec                  receiver

# AC1300

[ ID] Interval           Transfer     Bitrate         Retr
[SUM]   0.00-10.00  sec   363 MBytes   305 Mbits/sec    0             sender
[SUM]   0.00-10.05  sec   351 MBytes   293 Mbits/sec                  receiver

测试结果始终保持一致,表明无线性能稳定。

测试结果与对比

下表总结了测试结果。

由于Wi-Fi链路速率(RX、TX和iperf3 )会因测量时机和无线电环境的不同而有所变化,因此这些数值应视为参考测量值,而非绝对数值。

特别是,iw dev wlan0 link 报告的数值往往会出现波动。

结论

在我们的测试环境中,使用 Raspberry Pi OS Bookworm 时,这两款适配器都需要额外的 DKMS 驱动程序。

本文中使用的驱动程序是基于wireless-next代码库的回溯移植版本,这意味着标准 Linux 内核最终可能会支持这些芯片组。

特别是对RTL8822BU芯片组的支持,似乎正在上游项目中取得进展。相关讨论可在树莓派官方论坛上找到。

启用RTW88_8821AU选项可添加对 RTL8811AU/RTL8821AU 系列的支持。
来源: https://forums.raspberrypi.com/viewtopic.php?t=392929

基于Trixie及更新内核的未来 Raspberry Pi OS 版本可能会包含改进的内置支持。

然而,截至本文撰写之时,某些环境仍需要使用 DKMS/回溯移植驱动程序,即使是针对 RTL8822BU 芯片组也是如此。

在我们的测试中,lwfinger/rtw88代码库为这两款适配器都提供了稳定且可靠的工作表现。

如果您使用的是基于相同瑞昱(Realtek)芯片组的 USB Wi-Fi 适配器,我们建议您按照本文所述的步骤操作。


由Raspida供稿

Raspida 运营 raspida.com,这是一个旨在让非工程师也能乐在其中的树莓派信息网站。基于多年对树莓派的实践经验,该网站发布了大量实用文章和专题内容,既适合经验丰富的树莓派用户,也适合有兴趣入门的新手。Raspida 还向 PiLink 网站供稿,发布关于工业级树莓派产品的技术博客文章