У меня возникла мелкая, но вредная неприятность видимо, из-за статики испортился контроллер USB в ноутбуке. Это, судя по интернету, довольно частая беда ноутбуков выпуска первых лет тысячелетия. Проявляется беда в том, что при подгрузке модуля ehci_hcd система начинает сыпать в логи сообщениями о потерянных кадрах и прерываниях, потом начинает регулярно замирать, а потом виснет намертво.
Известны и варианты лечения:
1. Перепаять чип на материнской плате
2. Использовать опцию ядра irqpoll (говорят, что acpi=noirq тоже помогает, но у меня ноутбук)
3. Не грузить ehci_hcd и жить только на USB-1.0, который обычно выживает.
У каждого есть недостатки
1. Стоит денег, плюс потенциально кривые руки мастера в недрах ноутбука дешевле новый купить.
2. Все существенно тормозит.
3. Скорость максимум 1,2 Мб/с
Я выбрал 3 пункт как самый легкий и полностью меня устраивающий мыши и USB-1 для нормальной работы за глаза.
Однако в последнее время мне часто нужно работать с внешними накопителями. Пришлось купить PCMCIA USB 2.0 контроллер. И сразу вылезла проблема ehci_hcd при загрузке захватывает все порты, как собственно ноутбука, так и внешние. Это чревато зависанием системы или нестабильной работой.
Придуманный мной метод обхода
1. При загрузке использовать опцию irqpoll
2. В rc.local вставить строку вида echo -n 0000\:00\:1d.7 > /sys/bus/pci/drivers/ehci_hcd/unbind, где 0000\:00:\1d.7 номер функции PCI того контроллера, который мы хотим отключить от USB 2.0
То есть система грузится c USB-2 на всех портах (irqpoll нужно, чтобы вообще загрузилась), а потом отключает поддержку USB-2 на сгоревшем контроллере (и тем самым проблемы, требующие irqpoll, устраняются).
Достоинства теперь на портах встроенного USB-контроллера USB-1, а на портах внешнего контроллера USB-2.
Недостатки при загрузке системы нужно вытащить все USB-устройства, иначе опять-таки не загрузится. И использование irqpoll
Чего не получилось сделать не умею отвязать порты на стадии загрузки модуля или формирования систем /sys или /dev. Это позволило бы избавиться от необходимости использовать irqpoll при загрузке ядра и не выдергивать все из USB-портов ноутбука при перезагрузке.