Ich vermute, dass mein Netzwerktreiber für ein Atheros- ath9k
Gerät fehlerhaft ist, da ich irgendwann SW-IOMMU-Fehler bekomme. Manchmal kann ich es in diesem Fall einfach rmmod
wiederherstellen modprobe
und es funktioniert wieder. Manchmal muss ich das Gerät tatsächlich entfernen, indem ich es abtrenne. Und wenn ich zu lange warte, verursacht das vermutlich zu viele Probleme, bis ich das rmmod
Gerät nicht mehr abtrennen kann. Wenn ich das tue, bleibt das System auf unbestimmte Zeit hängen.
Da ich nicht vorhabe, den Treiber zu reparieren (ich bin kein Firmware-Entwickler), ist es eine „ausreichende“ Lösung, den Treiber einfach regelmäßig zu aktualisieren, rmmod
oder modprobe
wird das auch nicht funktionieren?
Antwort1
Ich bin Kernel-Entwickler und kann Ihnen daher sagen: „Es kommt darauf an.“ Es ist nicht unmöglich, dass ein proaktives Entfernen und erneutes Einfügen eines Treibers einen Fehler verhindern kann, so wie ein Apfel pro Tag im Vergleich zum Arzt. Es hängt vom Fehler ab.
Ein gutes Beispiel für ein Problem, für das rmmod eine Problemumgehung sein kann, ist eine außer Kontrolle geratene Speicherzuweisung im Treiber (einde factoLeck), sodass der Treiber den Speicher nicht aus den Augen verliert und ihn beim rmmod bereinigen kann.
Wenn der Fehler auf Instabilität aufgrund von Beschädigungen zurückzuführen ist, ist es unwahrscheinlich, dass es eine Problemumgehung gibt, aber möglich ist es. Nehmen wir an, das Problem tritt in mehreren Schritten auf: Zuerst muss der Treiber in einen relativ seltenen Zustand S (möglicherweise einen ungültigen Zustand) gelangen, und dann muss ein relativ seltenes Ereignis E auftreten, während er sich in diesem Zustand befindet. (Wenn E auftritt und der Treiber sich nicht im Zustand S befindet, lässt sich das Problem nicht reproduzieren.) Wenn rmmod und erneutes Einfügen den Treiber aus dem Zustand S holen und dies regelmäßig durchgeführt wird, wird das Problem weniger reproduzierbar.
Das Entfernen und erneute Einfügen kann wiederum Probleme mit sich bringen, z. B. Lecks (der Treiber bereinigt nicht alles auf rmmod) oder das Zurücklassen hängender Zeiger (der Treiber gibt die Zuordnung eines Objekts auf, meldet es aber nicht ordnungsgemäß von allen seinen Verknüpfungen ab). Bei der Entwicklung dynamischer Treiber sollte ein Testfall ein Shell-Skript sein, das ein rmmod/insmod in einer Schleife ausführt. (Das bietet natürlich keine vollständige Abdeckung: Sie benötigen auch insmod; various actual use cases of driver; rmmod
eine Schleife).
Antwort2
Sie können die neueste Version von ath9k
Backports herunterladen, um einige der folgenden Probleme zu lösen: „Die WLAN-Verbindung wird ständig getrennt“, „Das Internet ist langsam“, „Kann nicht rmmod/modprobe
…“
Laden Sie die neuesten Backports herunter und installieren Sie sie:
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
Wenn alles erfolgreich abgeschlossen ist, erhalten Sie:
Your backported driver modules should be installed now.
Reboot.
Führen Sie den folgenden Befehl aus, um den Treiber beim Booten zu laden, und starten Sie dann neu:
echo "ath9k" | sudo tee -a /etc/modules
reboot
Laden Sie den Treiber neu:
rmmod ath9k
modprobe ath9k