Linux WiFi 模组使用及故障排查整理文档
- 1. STA 模式下 WiFi 延时不稳定问题
- 解决方法:
- 2. Power Saving 机制说明
- 3. AP 模式下 WiFi 设置
- 4. RTL8821CS AP 模式下 Windows 客户端异常断开问题
- 问题描述
- 问题原因
- 解决方案
- 步骤 1:修改 dnsmasq 配置
- 步骤 2:重启 dnsmasq 服务
- 步骤 3:Windows 客户端释放并更新 IP
- 步骤 4:Wireshark 抓包验证
- 技术背景说明
- 附加建议
1. STA 模式下 WiFi 延时不稳定问题
当 WiFi 配置为 STA 模式并连接路由器后,Ping 路由器时发现数据传输延时不稳定。可通过以下方法解决:
解决方法:
-
关闭驱动中的低功耗模式
- 修改
Makefile
中配置:CONFIG_POWER_SAVING = n
- 修改
-
在开机时关闭 WiFi 的省电模式
- 添加开机执行命令:
iw wlan0 set power_save off
- 需要在 Buildroot 中启用 iw 命令支持:
BR2_PACKAGE_IW=y
- 添加开机执行命令:
-
避免 WiFi 自动扫描引起的干扰
2. Power Saving 机制说明
参考 Arch Wiki: Wireless Power Saving
- 尽管某些 Atheros ath9k 单芯片(如 AR9280 以后)默认启用动态省电,但部分设备(如 AR9285)仍可能出现省电未启用的情况。
- 开启省电可能会出现如下错误:
iw dev wlan0 set power_save on
3. AP 模式下 WiFi 设置
使用 hostapd
和 udhcpd
配置 WiFi 为 AP 模式,详细教程参考:
- https://blog.csdn.net/wit_732/article/details/121038477
4. RTL8821CS AP 模式下 Windows 客户端异常断开问题
问题描述
- 在 Windows 平台上使用 RTL8821CS 芯片 AP 模式时,TCP Socket 会异常断开。
- Android 和 iOS 平台表现正常。
- 使用 Wireshark 抓包发现:客户端试图请求一个非 DHCP 服务器分配的 IP 地址。
问题原因
Windows 客户端可能保存旧 IP 地址并尝试续租,而当前的 DHCP 服务器(dnsmasq)未曾分配过该 IP,导致请求失败和连接中断。
解决方案
步骤 1:修改 dnsmasq 配置
编辑 /etc/dnsmasq.conf
或相关目录下配置文件,添加以下配置:
dhcp-authoritative
作用:将 dnsmasq 设为权威 DHCP 服务器,强制客户端使用其分配的 IP。
步骤 2:重启 dnsmasq 服务
sudo systemctl restart dnsmasq
# 或
sudo service dnsmasq restart
步骤 3:Windows 客户端释放并更新 IP
在 Windows 命令行中执行:
ipconfig /release
ipconfig /renew
确保获取的 IP 属于 DHCP 服务分配的子网。
步骤 4:Wireshark 抓包验证
过滤条件:udp.port == 67 || udp.port == 68
确认:
- 客户端请求旧 IP 时,服务器是否返回 NAK。
- 客户端是否重新发起 DHCP Discover 并正确获取 IP。
技术背景说明
-
DHCP 权威模式(dhcp-authoritative):
使服务器在遇到非法或未知 IP 请求时,返回 DHCP NAK,强制客户端重新申请新 IP。 -
系统差异:
Android/iOS 更主动释放旧 IP,而 Windows 更倾向于续租旧 IP,因此更依赖服务器的“权威性”。
附加建议
-
缩短租约时间(例如设置为 12 小时):
dhcp-lease-time=43200
-
设置静态 IP 分配(对特定设备):
dhcp-host=MAC地址,IP地址
通过上述方法,可以有效解决 Windows 客户端在 RTL8821CS AP 模式下 TCP Socket 异常断开的问题。