Сбой системы – как выгрузить xhci_hcd и разрешить только ehci_hcd в Ubuntu 12.04, 13.04 для отладки некоторых USB-устройств.

Вопрос или проблема

У меня есть несколько 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

  1. Проверка текущего состояния модулей:
    В первую очередь убедитесь, какие USB контроллеры используются в вашей системе. Выполните команду:

    lsmod | grep hcd
  2. Выяснение необходимости перезагрузки ядра:
    Если xhci_hcd встроен в ядро, его нельзя выгрузить динамически. В этом случае единственное решение – перекомпиляция ядра, чтобы сделать его модулем.

  3. Перекомпиляция ядра:

    • Загрузите исходный код ядра той версии, которая соответствует вашей системе.
    • Войдите в конфигурацию ядра командой:
      make menuconfig
    • Перейдите к меню драйверов устройств: Device Drivers -> USB support.
    • Измените состояние xhci_hcd с встроенного (возможно настроенного как [*]) на модульное (<M>), настроив параметр CONFIG_USB_XHCI_HCD=m.
    • Сохраните изменения и перекомпилируйте ядро:
      make
      make modules_install
      make install
  4. Настройка blacklist для xhci_hcd:

    • Откройте файл blacklist.conf для редактирования:
      sudo nano /etc/modprobe.d/blacklist.conf
    • Добавьте строку:
      blacklist xhci_hcd
    • Сохраните изменения и перезагрузите систему.
  5. Загрузка 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-оборудованием на вашей системе.

Оцените материал
Добавить комментарий

Капча загружается...