ath9k
結局 SW IOMMU エラーが発生するので、Atheros デバイスのネットワーク ドライバーにバグがあるのではないかと思います。このエラーが発生すると、単に元に戻すrmmod
だけmodprobe
で動作し始めることがあります。また、実際にデバイスを切断して取り外す必要がある場合もあります。また、あまり長く待つと、デバイスを取り外したり取り外せなくなるほどの大きな問題が発生すると思いますrmmod
。デバイスを取り外した場合、システムは永久にハングします。
ドライバーを修正する予定はないので (私はファームウェア開発者ではありません)、定期的にドライバーを更新するだけで「十分な」修正になるのでしょうか、rmmod
それともmodprobe
それでも機能しないのでしょうか?
答え1
私はカーネル開発者なので、「場合による」と断言できます。ドライバーを事前に削除して再挿入することで、医者に診てもらうよりも 1 日に 1 個のリンゴを処方してもらうほうがバグを防げるというのは不可能ではありません。バグによります。
rmmod が回避策となる問題の好例は、ドライバのメモリ割り当ての暴走です(デファクトドライバーがメモリを失わず、rmmod 時にメモリをクリーンアップできるように、メモリ リークを防止します。
バグが破損によって不安定になった場合、回避策は可能ではあるものの、可能性は低いでしょう。問題がいくつかのステップで発生すると仮定します。まず、ドライバーが比較的まれな状態 S (無効な状態など) になり、次にその状態にある間に比較的まれなイベント E が発生します。(E が発生し、ドライバーが状態 S でない場合、問題は再現されません。) rmmod と再挿入によってドライバーが状態 S から抜け出し、定期的に実行される場合、問題の再現性は低くなります。
削除と再挿入には、リークの発生 (ドライバーは rmmod ですべてをクリーンアップしない) や、未解決のポインターの残置 (ドライバーは一部のオブジェクトの割り当てを解除するが、すべての関連付けから適切に登録解除しない) などの独自の問題が発生する場合があります。動的ドライバーを開発する場合、1 つのテスト ケースは、ループ内で rmmod/insmod を実行するシェル スクリプトにする必要があります (もちろん、これで完全に網羅できるわけではありません。insmod; various actual use cases of driver; rmmod
ループ内でも実行する必要があります)。
答え2
バックポートから最新バージョンを入手するath9k
と、「Wi-Fi が切断され続ける」、「インターネットが遅い」、「できない」などの問題を解決できます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