rmmod 有缺陷的网络驱动程序

rmmod 有缺陷的网络驱动程序

我怀疑 Atheros 设备的网络驱动程序有问题,ath9k因为我最终会收到 SW IOMMU 错误。有时,当发生这种情况时,我只需将其恢复即可rmmod开始modprobe工作。其他时候,我实际上必须通过断开连接来删除该设备。而且,如果我等待太久,我想,这会造成太多麻烦,以至于我无法rmmod或拔掉设备。如果我这样做,系统将无限期挂起。

由于我不打算修复驱动程序(我不是固件开发人员),因此定期rmmod修复modprobe驱动程序是否是一个“足够”的好修复,或者这也不起作用?

答案1

我是一名内核开发人员,所以我可以告诉你“这取决于”。主动移除并重新插入驱动程序可以避免错误,这并非不可能,就像每天一个苹果与医生一样。这取决于错误。

rmmod 可以作为解决方法的一个很好的例子是驱动程序中失控的内存分配(事实上的泄漏),这样驱动程序就不会丢失内存并且能够在 rmmod 时清理它。

如果错误是由腐败引起的不稳定,那么它不太可能成为解决方法,尽管有可能。假设问题分几个步骤进行:首先,驾驶员必须进入某种相对罕见的状态 S(可能是无效状态),然后在处于该状态时必须发生某种相对罕见的事件 E。 (如果发生 E 并且驱动程序不处于状态 S,则问题不会重现。)如果 rmmod 和重新插入使驱动程序脱离状态 S,并且定期执行,则问题的重现性会降低。

删除和重新插入本身可能会出现问题,例如引入泄漏(驱动程序不会清理 rmmod 上的所有内容)或留下悬空指针(驱动程序释放某些对象,但没有正确地将其从所有对象中注销)协会)。开发动态驱动程序时,一个测试用例应该是一个在循环中执行 rmmod/insmod 的 shell 脚本。 (当然,这并不能提供完整的覆盖范围:您还需要insmod; various actual use cases of driver; rmmod循环)。

答案2

您可以从向后移植获取最新版本ath9k来解决一些问题,例如:“Wifi 不断断开”、“互联网速度很慢”、“无法rmmod/modprobe...

下载并安装最新的向后移植:

wget https://www.kernel.org/pub/linux/kernel/projects/backports/stable/v4.4.2/backports-4.4.2-1.tar.gz
make defconfig-ath9k
make -j 16
make install

当一切成功完成后,您将得到:

Your backported driver modules should be installed now.
Reboot.

运行以下命令在启动时加载驱动程序,然后重新启动:

echo "ath9k" | sudo tee -a /etc/modules
reboot

重新加载驱动程序:

rmmod ath9k
modprobe ath9k

相关内容