Вопрос или проблема
У меня есть несколько USB-устройств, которые используют мощность 500мА (5В), после исследования я выяснил, что внешнее питание или концентратор были решением, но это было пустой тратой времени, даже при внешнем питании проблема не исчезала.
Теперь единственный способ устранить эту проблему — отключить Xhci_hcd в Ubuntu 12.04 или Ubuntu 13.04 и оставить только Ehci_hcd, так как именно там начинается 99% проблем.
Но в Ubuntu практически невозможно или почти миссия невыполнима сейчас отключить xhci_hcd, как я могу это сделать, пожалуйста?
попробовал:
$ cd /etc/pm/config.d/
$ pwd
/etc/pm/config.d
$ ls
00sleep_module unload_modules unload_module
root@e300gent:/etc/pm/config.d# cat *
SUSPEND_MODULES="xhci"
SUSPEND_MODULES="xhci"
SUSPEND_MODULES="xhci"
$ tail -f /var/log/syslog
Oct 6 10:47:54 e300gent kernel: [ ] xhci_hcd 0000:02:00.0: ERROR Transfer event TRB DMA ptr not part of current TD
Oct 6 10:47:54 e300gent kernel: [ ] xhci_hcd 0000:02:00.0: WARN Successful completion on short TX: needs XHCI_TRUST_TX_LENGTH quirk?
Oct 6 10:47:54 e300gent kernel: [ ] xhci_hcd 0000:02:00.0: ERROR Transfer event TRB DMA ptr not part of current TD
Oct 6 10:47:54 e300gent kernel: [ ] usb 3-1: USB disconnect, device number 2
Oct 6 10:48:00 e300gent kernel: [ ] usb 1-1.4: new high-speed USB device number 5 using ehci_hcd
Oct 6 10:48:00 e300gent kernel: [ ] uvcvideo: Found UVC 1.00 device HD Pro Webcam C920 (046d:082d)
Oct 6 10:48:00 e300gent kernel: [ ] input: HD Pro Webcam C920 as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0/input/input17
Oct 6 10:48:00 e300gent mtp-probe: checking bus 1, device 5: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4"
Oct 6 10:48:01 e300gent rtkit-daemon[1470]: Successfully made thread 2583 of process 1464 (n/a) owned by '1000' RT at priority 5.
Oct 6 10:48:01 e300gent rtkit-daemon[1470]: Supervising 6 threads of 1 processes of 1 users.
ehci_hcd: также отключает устройство:
[ ] usb 1-1.4: reset high-speed USB device number 5 using ehci_hcd
[ ] usb 1-1.4: device descriptor read/64, error -110
[ ] usb 1-1.4: device descriptor read/64, error -110
[ ] usb 1-1.4: reset high-speed USB device number 5 using ehci_hcd
[ ] usb 1-1.4: device descriptor read/64, error -110
[ ] usb 1-1.4: device descriptor read/64, error -110
[ ] usb 1-1.4: reset high-speed USB device number 5 using ehci_hcd
[ ] usb 1-1.4: device not accepting address 5, error -110
[ ] usb 1-1.4: reset high-speed USB device number 5 using ehci_hcd
[ ] usb 1-1.4: device not accepting address 5, error -110
[ ] usb 1-1.4: USB disconnect, device number 5
[ ] usb 1-1.4: new high-speed USB device number 6 using ehci_hcd
[ ] usb 1-1.4: device descriptor read/64, error -110
[ ] usb 1-1.4: device descriptor read/64, error -110
[ ] usb 1-1.4: new high-speed USB device number 7 using ehci_hcd
[ ] usb 1-1.4: device descriptor read/64, error -110
а также в черном списке ядра, но xhci невозможно деактивировать в Ubuntu
Может ли кто-то показать несколько шагов, как отключить этот xhci, чтобы я мог точно определить проблему, отладив устройство только с помощью ehci?
xhci_hcd встроен в ядро по крайней мере в 14.04. Вы можете перекомпилировать ядро, чтобы оно было модулем (это находится в Device Drivers | USB support
в меню конфигурации ядра, нажмите пробел, чтобы установить значение M, или установите CONFIG_USB_XHCI_HCD=m
в файле .config). С этим вы можете занести его в черный список и загружать и выгружать с помощью modprobe и rmmod по желанию.
К сожалению, для меня, я думаю, что моя материнская плата требует xhci_hcd даже для usb 2.0 и не может использовать только ehci_hcd, так что отсутствие загруженного модуля xhci_hcd означает отсутствие usb вообще (или нужно предпринять дополнительные шаги, чтобы это заработало):
$ lsusb
unable to initialize libusb: -99
Но наличие модуля xhci полезно, я могу хотя бы перекомпилировать его с некоторыми изменениями без необходимости перекомпиляции всего ядра.
Ответ или решение
Для решения проблемы с постоянными сбоями системы, вызванными USB-оборудованием, которое потребляет 500 мА (5 В) мощности, вы решили отключить xhci_hcd
и использовать только ehci_hcd
в Ubuntu 12.04 или 13.04 для отладки. Рассмотрим, как это можно сделать, чтобы устранить проблему.
Шаги для отключения xhci_hcd
и использования только ehci_hcd
-
Проверка текущего состояния модулей:
В первую очередь убедитесь, какие USB контроллеры используются в вашей системе. Выполните команду:lsmod | grep hcd
-
Выяснение необходимости перезагрузки ядра:
Еслиxhci_hcd
встроен в ядро, его нельзя выгрузить динамически. В этом случае единственное решение – перекомпиляция ядра, чтобы сделать его модулем. -
Перекомпиляция ядра:
- Загрузите исходный код ядра той версии, которая соответствует вашей системе.
- Войдите в конфигурацию ядра командой:
make menuconfig
- Перейдите к меню драйверов устройств:
Device Drivers -> USB support
. - Измените состояние
xhci_hcd
с встроенного (возможно настроенного как[*]
) на модульное (<M>
), настроив параметрCONFIG_USB_XHCI_HCD=m
. - Сохраните изменения и перекомпилируйте ядро:
make make modules_install make install
-
Настройка blacklist для xhci_hcd:
- Откройте файл
blacklist.conf
для редактирования:sudo nano /etc/modprobe.d/blacklist.conf
- Добавьте строку:
blacklist xhci_hcd
- Сохраните изменения и перезагрузите систему.
- Откройте файл
-
Загрузка
ehci_hcd
при старте системы:
Убедитесь, что модульehci_hcd
загружается при старте системы:echo "ehci_hcd" | sudo tee -a /etc/modules
Диагностика и отладка
После отключения xhci_hcd
и использования только ehci_hcd
, выполните следующие шаги для диагностики:
-
Мониторинг журнала системы:
Просматривайте вывод команды:tail -f /var/log/syslog
чтобы выявить новые ошибки и проблемы с отладкой USB-устройств, используя только
ehci_hcd
. -
Тестирование подключённых устройств:
Подключите проблемные устройства и проверьте их работу сehci_hcd
. Это позволит увидеть изменения в поведении устройств и обнаружить возможные отклонения.
Данная процедура поможет прояснить, являются ли проблемы с USB-устройствами следствием работы xhci_hcd
, и позволит достичь более стабильной работы системы.
Подводя итог, если вы готовы к перекомпиляции ядра, это позволит вам больше управлять загрузочными модулями и более детально отладить проблемы с USB-оборудованием на вашей системе.