![rmmod 有缺陷的网络驱动程序](https://linux22.com/image/95254/rmmod%20%E6%9C%89%E7%BC%BA%E9%99%B7%E7%9A%84%E7%BD%91%E7%BB%9C%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F.png)
我怀疑 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