Я подозреваю, что у меня глючный сетевой драйвер для ath9k
устройства Atheros, так как в конечном итоге я получаю ошибки SW IOMMU. Иногда, когда это происходит, я могу просто rmmod
вернуть modprobe
его обратно, и оно начнет работать. В других случаях мне приходится фактически удалять устройство, отсоединяя его. И если я подожду слишком долго, я полагаю, это вызовет слишком много проблем до такой степени, что я не смогу rmmod
отключить устройство. Если я это сделаю, система зависнет на неопределенный срок.
Поскольку я не планирую исправлять драйвер (я не разработчик прошивки), будет ли «достаточно» просто периодически обновлять rmmod
драйвер modprobe
или это тоже не сработает?
решение1
Я разработчик ядра, поэтому могу сказать, что "это зависит". Не исключено, что упреждающее удаление и повторная установка драйвера может предотвратить ошибку, как одно яблоко в день против доктора. Это зависит от ошибки.
Отличным примером проблемы, которую можно обойти с помощью rmmod, является неконтролируемое выделение памяти в драйвере (де-фактоутечка) таким образом, чтобы драйвер не потерял память и смог очистить ее во время rmmod.
Если ошибка вызвана нестабильностью, вызванной повреждением, то вряд ли это будет обходным путем, хотя это возможно. Предположим, что проблема разворачивается в несколько этапов: сначала драйвер должен перейти в некоторое относительно редкое состояние S (возможно, недопустимое состояние), а затем должно произойти некоторое относительно редкое событие E, пока он находится в этом состоянии. (Если E происходит, а драйвер не находится в состоянии S, то проблема не воспроизводится.) Если rmmod и повторная вставка выводят драйвер из состояния S и выполняются периодически, то проблема становится менее воспроизводимой.
Удаление и повторная вставка могут иметь свои собственные проблемы, такие как введение утечек (драйвер не очищает все в rmmod) или оставление висячих указателей (драйвер освобождает некоторый объект, но не отменяет его регистрацию должным образом из всех его ассоциаций). При разработке динамических драйверов одним из тестовых случаев должен быть скрипт оболочки, который выполняет rmmod/insmod в цикле. (Это, конечно, не обеспечивает полного покрытия: вам также нужен insmod; various actual use cases of driver; rmmod
цикл).
решение2
Вы можете получить последнюю версию из ath9k
backports, чтобы решить некоторые проблемы, такие как: «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