Inhaltsverzeichnis
Wi-Fi 7 unter Linux (Raspberry Pi 5)
Der Einsatz von Wi-Fi 7 unter Linux hält ein paar Überraschungen und Unwegbarkeiten bereit, die Akzeptanz und Unterstützung durch die Hersteller scheint sich aber zu verbessern. Diese Seite soll die Ergebnisse meiner Tests dokumentieren und auch die Fortschritte der Treiberentwicklung festhalten.
Diese Seite befindet sich noch im Aufbau!
Testaufbau
- Es ist zu berücksichtigen dass der PCIe-Bus des Raspberry Pi 5 lediglich x1 zur Verfügung stellt
- Der Einsatz des MikroTik Switches ist einer möglichst hohen Neutralität dieser Tests geschuldet
- Beim verwendeten PCIe E-Key Moduls des Raspberry Pi 5 handelt es sich um dieses Modell: ThePiHut: 52Pi - M.2 2242 E-Key Top for Raspberry Pi 5
Übersicht/Ergebnisse
Wi-Fi 7 Funktion | Intel BE200 | Qualcomm NCM865 / WCN7850 | MediaTek 7925 | Realtek 8922AE |
---|---|---|---|---|
Bild | ![]() | ![]() | ![]() | ![]() |
Maximale Kanalbreite | 320 MHz | 320 MHz | 160 MHz | 160 MHz |
Multi-Link Operation (Hardware/Funktion) | ja/ja | ja/nein | ja/nein | ja/ja (mit viel Arbeit) |
MLO-Details | eMLSR mit STR | - | - | STR |
Gemessener iPerf3 Durchsatz (TCP) | ~4.2 Gbps | - | - | ~830 Mbps |
Verwendete Firmware | - | - | - | 0.35.71.0 (78c29b95) |
Verwendeter Kernel | - | - | - | 6.14.7-v8-16k+ |
Distribution | Raspberry Pi OS (Debian/testing) | Raspberry Pi OS (Debian/testing) | Raspberry Pi OS (Debian/testing) | Raspberry Pi OS (Debian/testing) |
wpa_supplicant | v2.11 | - | - | v2.12-devel-hostap_2_11-868-g4b8ac10cb |
Wireshark/PCAP | intel_be200_emlsr.pcap.zip #681 | - | - | rtw89_git.pcap.zip #717 |
Verwendeter Access Point | Stellar Wireless AP1521 | Stellar Wireless AP1521 | Stellar Wireless AP1521 | Stellar Wireless AP1521 |
Verwendete AWOS Version | 5.0.2.11 | 5.0.2.11 | 5.0.2.11 | 5.0.2.11 |
Wi-Fi 7 NICs
Intel BE200
- Mit weitem Abstand die beste Unterstützung unter Linux
- MLO funktioniert mit wpa_supplicant v2.11
Qualcomm NCM865 / WCN7850
- Funktion bisher eher mittelmäßig
- MLO-Unterstützung funktioniert bisher nicht
MediaTek 7925
- Funktion bisher eher mittelmäßig
- MLO-Unterstützung funktioniert nicht
- iPerf3 TCP-Durchsatz sehr schwach (~150 Mbps) ⇒ braucht weitere Tests
Realtek 8922AE
- Funktion bisher eher mittelmäßig
MLO-Unterstützung funktioniert nicht⇒ siehe: Issue-RTW89-4Die Wireless-Verbindung wird regelmäßig getrennt und bleibt in 2.4 GHz ebenfalls eher instabil⇒ siehe: Issue-RTW89-2
Issue-RTW89-1 - Schwierigkeiten beim Start des Moduls
[ 8.102386] rtw89_8922ae 0001:01:00.0: loaded firmware rtw89/rtw8922a_fw-3.bin [ 8.102503] rtw89_8922ae 0001:01:00.0: quirks=00 00 00 00 00 00 00 00 custid=0 [ 8.102555] rtw89_8922ae 0001:01:00.0: full firmware has been early requested [ 8.102574] rtw89_8922ae 0001:01:00.0: enabling device (0000 -> 0002) [ 8.102709] rtw89_8922ae 0001:01:00.0: failed to alloc txwd ring of txch 0 [ 8.102712] rtw89_8922ae 0001:01:00.0: failed to alloc tx ring 0 [ 8.102713] rtw89_8922ae 0001:01:00.0: failed to alloc dma tx rings [ 8.102714] rtw89_8922ae 0001:01:00.0: failed to alloc pci trx rings [ 8.102718] rtw89_8922ae 0001:01:00.0: failed to setup pci resource [ 8.102748] rtw89_8922ae 0001:01:00.0: probe with driver rtw89_8922ae failed with error -12
Lösung:
/etc/firmware/config.txt
entsprechend anpassen
# Wi-Fi 7 Test dtparam=pciex1 dtparam=pciex1_gen=3 # ath12k / mt7925e / rtw89_8922ae dtoverlay=pcie-32bit-dma dtoverlay=pciex1-compat-pi5,no-mip
Issue-RTW89-2 - Regelmäßige Trennung von 5 & 6 GHz Frequenz/Band
Lösung/Workaround:
sudo vi /etc/modprobe.d/rtw89.conf options rtw89_core disable_ps_mode=y
Issue-RTW89-3 - Geringer iPerf3 TCP-Durchsatz
Derzeit keine Lösung/Workaround.
pi@wifitux:~ $ iperf3 -c 192.168.2.1 Connecting to host 192.168.2.1, port 5201 [ 5] local 192.168.2.115 port 52984 connected to 192.168.2.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 110 MBytes 926 Mbits/sec 4 1.00 MBytes [ 5] 1.00-2.00 sec 111 MBytes 935 Mbits/sec 0 1.08 MBytes [ 5] 2.00-3.00 sec 91.6 MBytes 768 Mbits/sec 0 1.14 MBytes [ 5] 3.00-4.00 sec 109 MBytes 911 Mbits/sec 0 1.21 MBytes [ 5] 4.00-5.00 sec 95.2 MBytes 799 Mbits/sec 0 1.26 MBytes [ 5] 5.00-6.00 sec 96.0 MBytes 805 Mbits/sec 0 1.32 MBytes [ 5] 6.00-7.00 sec 97.0 MBytes 814 Mbits/sec 0 1.37 MBytes [ 5] 7.00-8.00 sec 76.9 MBytes 645 Mbits/sec 0 1.41 MBytes [ 5] 8.00-9.00 sec 109 MBytes 912 Mbits/sec 0 1.47 MBytes [ 5] 9.00-10.00 sec 101 MBytes 848 Mbits/sec 0 1.52 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 997 MBytes 836 Mbits/sec 4 sender [ 5] 0.00-10.06 sec 995 MBytes 829 Mbits/sec receiver iperf Done. pi@wifitux:~ $ pi@wifitux:~ $ sudo iw wlan0 station dump Station 88:3c:93:01:ce:60 (on wlan0) inactive time: 15564 ms rx bytes: 67023875 rx packets: 273868 tx bytes: 6014843719 tx packets: 795329 tx retries: 0 tx failed: 2 beacon loss: 0 rx drop misc: 118464 signal: -38 [-36, -44] dBm signal avg: -38 [-36, -44] dBm tx bitrate: 1441.1 MBit/s 160MHz EHT-MCS 13 EHT-NSS 1 EHT-GI 0 tx duration: 0 us rx bitrate: 2593.5 MBit/s 160MHz EHT-MCS 12 EHT-NSS 2 EHT-GI 0 rx duration: 0 us authorized: yes authenticated: yes associated: yes preamble: long WMM/WME: yes MFP: yes TDLS peer: no DTIM period: 1 beacon interval:100 short slot time:yes connected time: 3126 seconds associated at [boottime]: 1918.054s associated at: 1748180174973 ms current time: 1748183300666 ms
Issue-RTW89-4 - MLO funktioniert nur mit deaktivierten PS_MODE
Lösung/Workaround:
options rtw89_core_git disable_ps_mode=y
Tracking: https://github.com/morrownr/rtw89/issues/7
Hinweis: Damit das Debugging via debug_mask funktionieren kann, muss das Modul mit Debug-Unterstützung kompiliert werden.
Prüfen lässt sich dies via
pi@wifitux:~ $ sudo systool -vm rtw89_core Module = "rtw89_core" Attributes: coresize = "720896" initsize = "0" initstate = "live" refcnt = "2" srcversion = "FA6FA77364F961BBE42F1D1" taint = "" uevent = <store method only> Parameters: debug_mask = "65535" disable_ps_mode = "N" Sections: .altinstructions = "0xffffd06f7bc40640" .bss = "0xffffd06f7b916300" .data = "0xffffd06f7b916310" .gnu.linkonce.this_module= "0xffffd06f7b917d00" .init.plt = "0xffffd06f7b798000" .note.Linux = "0xffffd06f7bc5b6b4" .note.gnu.build-id = "0xffffd06f7bc5b690" .note.gnu.property = "0xffffd06f7bc5b670" .plt = "0xffffd06f7bc38980" .rodata = "0xffffd06f7bc40ba8" .rodata.str = "0xffffd06f7bc59991" .rodata.str1.8 = "0xffffd06f7bc47658" .strtab = "0xffffd06f7b9dd668" .symtab = "0xffffd06f7b9d0000" .text.ftrace_trampoline= "0xffffd06f7bc390b8" .text = "0xffffd06f7bbc8000" __bug_table = "0xffffd06f7b914000" __kcrctab = "0xffffd06f7bc404b0" __ksymtab = "0xffffd06f7bc40000" __ksymtab_strings = "0xffffd06f7bc5b6e4" __param = "0xffffd06f7bc5b620" __patchable_function_entries= "0xffffd06f7b914828"
pi@wifitux:~ $ sudo modinfo rtw89_core filename: /lib/modules/6.14.7-v8-16k+/kernel/drivers/net/wireless/realtek/rtw89/rtw89_core.ko.xz license: Dual BSD/GPL description: Realtek 802.11ax wireless core module author: Realtek Corporation srcversion: FA6FA77364F961BBE42F1D1 depends: mac80211,cfg80211,rfkill intree: Y name: rtw89_core vermagic: 6.14.7-v8-16k+ SMP preempt mod_unload modversions aarch64 parm: debug_mask:Debugging mask (uint) parm: disable_ps_mode:Set Y to disable low power mode (bool)
Für das Realtek 8922AE Modul gibt es drei Projekte
- https://github.com/lwfinger/rtw89/ - offenbar etwas veraltet
- Linux Kernel 6.14 enthält alles notwendige für das RTW89 8922AE Modul, allerdings funktioniert MLO (derzeit) nicht
- https://github.com/morrownr/rtw89 - neuerer Code der offenbar ab Linux v6.16 enthalten sein soll
Eigenes Kernelmodul aus neueren Quellen bauen: (Header/Quellcode des laufenden Kernels sind dafür notwendig)
pi@wifitux:~/may25 $ git clone https://github.com/morrownr/rtw89 Cloning into 'rtw89'... remote: Enumerating objects: 6244, done. remote: Counting objects: 100% (27/27), done. remote: Compressing objects: 100% (21/21), done. remote: Total 6244 (delta 12), reused 16 (delta 6), pack-reused 6217 (from 2) Receiving objects: 100% (6244/6244), 14.97 MiB | 28.24 MiB/s, done. Resolving deltas: 100% (4884/4884), done. pi@wifitux:~/may25 $ cd rtw89/ pi@wifitux:~/may25/rtw89 $ make clean modules make -C /lib/modules/`uname -r`/build M=$PWD clean make[1]: Entering directory '/home/pi/may25/linux' make[2]: Entering directory '/home/pi/may25/rtw89' make[2]: Leaving directory '/home/pi/may25/rtw89' make[1]: Leaving directory '/home/pi/may25/linux' make -j`nproc --ignore=1` -C /lib/modules/`uname -r`/build M=$PWD modules make[1]: Entering directory '/home/pi/may25/linux' make[2]: Entering directory '/home/pi/may25/rtw89' warning: the compiler differs from the one used to build the kernel The kernel was built by: gcc (Debian 12.2.0-14) 12.2.0 You are using: gcc (Debian 14.2.0-19) 14.2.0 CC [M] core.o CC [M] mac80211.o CC [M] mac.o CC [M] mac_be.o CC [M] phy.o CC [M] phy_be.o CC [M] fw.o CC [M] cam.o CC [M] efuse.o CC [M] efuse_be.o CC [M] regd.o CC [M] sar.o CC [M] coex.o CC [M] ps.o CC [M] chan.o CC [M] ser.o CC [M] acpi.o CC [M] util.o CC [M] debug.o CC [M] wow.o CC [M] rtw8851b.o CC [M] rtw8851b_table.o CC [M] rtw8851b_rfk.o CC [M] rtw8851b_rfk_table.o CC [M] rtw8851be.o CC [M] rtw8851bu.o CC [M] rtw8852a.o CC [M] rtw8852a_table.o CC [M] rtw8852a_rfk.o CC [M] rtw8852a_rfk_table.o CC [M] rtw8852ae.o CC [M] rtw8852b_common.o CC [M] rtw8852b.o CC [M] rtw8852b_table.o CC [M] rtw8852b_rfk.o CC [M] rtw8852b_rfk_table.o CC [M] rtw8852be.o CC [M] rtw8852bu.o CC [M] rtw8852bt.o CC [M] rtw8852bt_rfk.o CC [M] rtw8852bt_rfk_table.o CC [M] rtw8852bte.o CC [M] rtw8852c.o CC [M] rtw8852c_table.o CC [M] rtw8852c_rfk.o CC [M] rtw8852c_rfk_table.o CC [M] rtw8852ce.o CC [M] rtw8922a.o CC [M] rtw8922a_rfk.o CC [M] rtw8922ae.o CC [M] pci.o CC [M] pci_be.o CC [M] usb.o LD [M] rtw89_core_git.o LD [M] rtw89_8851b_git.o LD [M] rtw89_8851be_git.o LD [M] rtw89_8851bu_git.o LD [M] rtw89_8852a_git.o LD [M] rtw89_8852ae_git.o LD [M] rtw89_8852b_common_git.o LD [M] rtw89_8852b_git.o LD [M] rtw89_8852be_git.o LD [M] rtw89_8852bu_git.o LD [M] rtw89_8852bt_git.o LD [M] rtw89_8852bte_git.o LD [M] rtw89_8852c_git.o LD [M] rtw89_8852ce_git.o LD [M] rtw89_8922a_git.o LD [M] rtw89_8922ae_git.o LD [M] rtw89_usb_git.o LD [M] rtw89_pci_git.o MODPOST Module.symvers CC [M] rtw89_core_git.mod.o CC [M] .module-common.o CC [M] rtw89_8851b_git.mod.o CC [M] rtw89_8851be_git.mod.o CC [M] rtw89_8851bu_git.mod.o CC [M] rtw89_8852a_git.mod.o CC [M] rtw89_8852ae_git.mod.o CC [M] rtw89_8852b_common_git.mod.o CC [M] rtw89_8852b_git.mod.o CC [M] rtw89_8852be_git.mod.o CC [M] rtw89_8852bu_git.mod.o CC [M] rtw89_8852bt_git.mod.o CC [M] rtw89_8852bte_git.mod.o CC [M] rtw89_8852c_git.mod.o CC [M] rtw89_8852ce_git.mod.o CC [M] rtw89_8922a_git.mod.o CC [M] rtw89_8922ae_git.mod.o CC [M] rtw89_pci_git.mod.o CC [M] rtw89_usb_git.mod.o LD [M] rtw89_core_git.ko LD [M] rtw89_8851b_git.ko LD [M] rtw89_8851be_git.ko LD [M] rtw89_8851bu_git.ko LD [M] rtw89_8852a_git.ko LD [M] rtw89_8852ae_git.ko LD [M] rtw89_8852b_common_git.ko LD [M] rtw89_8852b_git.ko LD [M] rtw89_8852be_git.ko LD [M] rtw89_8852bu_git.ko LD [M] rtw89_8852bt_git.ko LD [M] rtw89_8852bte_git.ko LD [M] rtw89_8852c_git.ko LD [M] rtw89_8852ce_git.ko LD [M] rtw89_8922a_git.ko LD [M] rtw89_8922ae_git.ko LD [M] rtw89_pci_git.ko LD [M] rtw89_usb_git.ko make[2]: Leaving directory '/home/pi/may25/rtw89' make[1]: Leaving directory '/home/pi/may25/linux' pi@wifitux:~/may25/rtw89 $ sudo make install install: creating directory '/lib/modules/6.14.7-v8-16k+/extra' install: creating directory '/lib/modules/6.14.7-v8-16k+/extra/rtw89' 'rtw89_8851b_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8851b_git.ko' 'rtw89_8851be_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8851be_git.ko' 'rtw89_8851bu_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8851bu_git.ko' 'rtw89_8852a_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852a_git.ko' 'rtw89_8852ae_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852ae_git.ko' 'rtw89_8852b_common_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852b_common_git.ko' 'rtw89_8852b_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852b_git.ko' 'rtw89_8852be_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852be_git.ko' 'rtw89_8852bt_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852bt_git.ko' 'rtw89_8852bte_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852bte_git.ko' 'rtw89_8852bu_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852bu_git.ko' 'rtw89_8852c_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852c_git.ko' 'rtw89_8852ce_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8852ce_git.ko' 'rtw89_8922a_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8922a_git.ko' 'rtw89_8922ae_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_8922ae_git.ko' 'rtw89_core_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_core_git.ko' 'rtw89_pci_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_pci_git.ko' 'rtw89_usb_git.ko' -> '/lib/modules/6.14.7-v8-16k+/extra/rtw89/rtw89_usb_git.ko' depmod -a `uname -r`