我的无线网络接口有问题。如果我尝试发送数据包,它似乎工作正常,当我必须接收某些东西时,麻烦就开始了。这就像它缓冲传入的数据包并且在使用 IF 发送某些东西之前不会将它们传递给上层,此时所有接收到的数据包都被处理。 这是我的wireshark的截图。如您所见,有几组传入数据包同时处理(在示例中它们是 CAMv1 数据包,但它适用于任何其他类型的数据包)
另一个奇怪的行为是,如果我尝试在该接口上 ping 我自己的地址,我会收到所有 ICMP 回复,但每隔几秒以 4-5-6 的随机组。
我的第一个猜测是它与一些电源管理设置有关,但即使禁用它,问题也没有解决。
接下来,我查看了中断日志,发现在该接口上从未调用过发送或接收中断:
还有cat /sys/kernel/debug/ieee80211/phy0/ath9k/interrupt的输出
所以看起来传输和接收是由一些轮询机制来处理的。经过一番研究,我发现了内核配置CONFIG_NET_RX_BUSY_POLL,我试图禁用它但运气不好,因为我不能通过menuconfig做到这一点,如果我尝试编辑 kernel/net/Kconfig 以手动禁用它(CONFIG_NET_RX_BUSY_POLL=n)由于内核恐慌,生成的图像无法启动,所以我想我应该满足一些依赖关系。
我也尝试过这个,但 menuconfig 和 .config 文件将 CONFIG_NET_RX_BUSY_POLL 保持为“是”。我也尝试从 menuconfig 编辑 PREEMPT_RT_FULL但我也不能,可能是因为我有不同的内核版本。
到目前为止,我已经走了多远,有没有人遇到相同或相似的问题,或者可以弄清楚我可以尝试什么?关注我的环境细节
板:基于 variscite mx8m 的定制板(https://variwiki.com/index.php?title=Debian_Build_Release&release=RELEASE_BUSTER_V2.3_DART-MX8M)
收发器:Compex WLE200NX、Atheros AR9280 芯片组,由 ath9k 驱动程序处理
操作系统和内核:Debian 10,内核 4.14.78