5

У меня есть система на основе Debian Mint, где я подключаю 16 USB-устройств. Kernal: 3.11.0-12-generic Примерно через 10 или около того устройств у меня начинаются проблемы с подключением новых. Там ошибка для одного такого устройства может быть найдена в dmesgs следующим образом (последние 2 строки отличаются)

[НОВОЕ ОБНОВЛЕНИЕ: ВРЕМЕННОЕ РЕШЕНИЕ] Я обнаружил, что эта проблема относится к xhci. В моем биосе я смог отключить xhci и заставить linux вернуться к ehci (предположительно). Теперь все мои устройства работают просто отлично! Конечно, это означает, что для меня нет устройств USB3. К счастью, мое немедленное применение не требует их. Я не знаю, является ли это проблемой Intel или Linux. Было бы хорошо оставить эту страницу открытой, потому что кто-то другой очень хотел бы ее найти.

dmesg | grep -i 3-5.1 

рабочее устройство:

[    1.883505] hub 3-5:1.0: USB hub found
[    1.883733] hub 3-5:1.0: 4 ports detected
[    3.370272] usb 3-5.1: new full-speed USB device number 17 using xhci_hcd
[    3.387126] usb 3-5.1: New USB device found, idVendor=03eb, idProduct=2045
[    3.387129] usb 3-5.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.387908] usb-storage 3-5.1:1.0: USB Mass Storage device detected
[    3.388006] scsi14 : usb-storage 3-5.1:1.0
[  121.738568] usb 3-5.1: USB disconnect, device number 17
[  121.942662] usb 3-5.1: new full-speed USB device number 28 using xhci_hcd
[  121.961332] usb 3-5.1: New USB device found, idVendor=03eb, idProduct=204b
[  121.961334] usb 3-5.1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[  121.961336] usb 3-5.1: Product: LUFA USB-RS232 Adapter
[  121.961337] usb 3-5.1: Manufacturer: Dean Camera
[  121.961338] usb 3-5.1: SerialNumber: 741333532373518080C1
[  121.961408] usb 3-5.1: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[  121.962080] cdc_acm 3-5.1:1.0: ttyACM3: USB ACM device
[ 1281.513105] usb 3-5.1: USB disconnect, device number 28

dmesg | grep -i 3-5.1 

Отказ устройства:

[    3.638401] usb 3-5.4: new full-speed USB device number 20 using xhci_hcd
[    3.655067] usb 3-5.4: New USB device found, idVendor=03eb, idProduct=2045
[    3.655070] usb 3-5.4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.655868] usb-storage 3-5.4:1.0: USB Mass Storage device detected
[    3.655977] scsi17 : usb-storage 3-5.4:1.0
[  118.793161] usb 3-5.4: USB disconnect, device number 20
[  122.603119] usb 3-5.4: new full-speed USB device number 31 using xhci_hcd
[  122.621653] usb 3-5.4: New USB device found, idVendor=03eb, idProduct=204b
[  122.621655] usb 3-5.4: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[  122.621656] usb 3-5.4: Product: LUFA USB-RS232 Adapter
[  122.621657] usb 3-5.4: Manufacturer: Dean Camera
[  122.621658] usb 3-5.4: SerialNumber: 74133353237351808021
[  122.621795] usb 3-5.4: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[  122.622419] usb 3-5.4: Not enough host controller resources for new device state.
[  122.622424] usb 3-5.4: can't set config #1, error -12

У меня аппаратная топология выглядит следующим образом: ПК -> 4 USB-концентратора с питанием -> каждый с 4 USB-устройствами (1). Эти устройства являются "двойной загрузкой", и вы можете видеть выше, где они извлекаются как устройства хранения данных и загружаются как последовательные устройства на тех же портах.

Я подключил USB-концентраторы прямо к источнику питания, каждое из моих устройств потребляет около 700 мА, а линия 5 В от источника питания падает до 4,69 В.

На моей машине есть несколько областей usb, так как я понимаю, что они связаны с базовыми концентраторами или корневыми концентраторами. Перемещение внешних узлов не имеет значения для результатов. Экспериментально: я думал, что размещение концентраторов на концентраторах приведет к большим проблемам, но результаты были такими же.

Когда все устройства подключены к источнику питания (и потребляют ток), но к ПК подключены только 3 концентратора, все в порядке. Когда я подключаю 4-й концентратор, я вижу в LSUSB, что все устройства есть, но только 1 из 4 устройств этого последнего концентратора подходит. В этом случае. 3-5.1 нормально, но 3-5.2 3-5.3 и 3-5.4, кажется, не загружают драйверы.

Все устройства идентичны, и я уже проверил такие вещи, как замена устройств вокруг, замена концентраторов и т.д. Это всегда последние устройства, чтобы войти. Это даже происходит, если последнее устройство отличается от мыши или беспроводного ключа. Устройство будет видно в lsusb, но оно не будет работать. Я предполагаю, что это указывает на чрезмерное ограничение USB в операционной системе, а не на то, что зависит от драйвера.

При перезагрузке это все еще последние 3 устройства, когда ток течет. ТЕМ НЕ МЕНИЕ. Я также могу перевести эти устройства в состояние, в котором ток не подается, и их можно поднять.

Мой вывод заключается в том, что ОС читает текущую картину и делает некоторую оценку энергоресурсов. Возможно, они получают эту информацию из узлов и, возможно, даже добавляют значения вместе. Было бы хорошо знать, могу ли я просто иметь «больше ресурсов хост-контроллера»

[обновление] Я нашел здесь то, что выглядит как исходный код для сообщения об ошибке: мне не нравится внешний вид "/* FIXME: можем ли мы выделить больше ресурсов для HC? */"Возможно, это также означает, что есть способ выделить больше ресурсов с самого начала.

Любые подсказки были бы великими Дэвид

3 ответа3

3

Я тоже попал в эту ошибку (после попытки подключить дюжину устройств сетевого интерфейса USB). Я почти уверен, что это не проблема электрического тока с устройствами: все они находятся на концентраторах с питанием и находятся в пределах текущих ограничений. Я думаю, что это проблема распределения прерываний или какого-либо другого ресурса.

Я попытался обойти отключение USB 3.0 в BIOS, но я подозреваю, что материнская плата использует USB 3.0 внутренне (для Bluetooth и некоторых других устройств), он не работал (lsusb -t показал, что xhci_hcd используется). Мне пришлось пересобрать ядро (я использую Ubuntu 14.04), чтобы удалить поддержку xhci, и тогда оно заработало.

Примечание: Ubuntu по умолчанию компилирует ehci и xhci в ядро - они не загружаются как модули. Я попытался перестроить их как модули, чтобы поиграть с ними с помощью modprobe, но это не удалось, потому что:

  1. Если ehci является модулем, он должен быть загружен до модулей ohci и ahci (см. Предупреждение в dmesg), и каждый способ, которым я пытался это сделать, не удался (в любом случае, я думал, что модули ядра должны были быть независимыми от порядка загрузки?),

  2. Модуль xchi всегда загружался, даже если он был в черном списке, предположительно для обработки внутреннего оборудования. Тем не менее, не очень много расследовал.

Только установив конфигурацию ядра, где был скомпилирован ehci и скомпилирован xhci, он заработал. Я не тестировал повторное включение USB 3.0 в BIOS с новым ядром без xhci.

2
Not enough host controller resources for new device state.

can't set config #1, error -12

Столкнулся с такими же ошибками. XHCI (usb 3.0) в ядре Linux ограничен 32 устройствами. Это похоже на ошибку. Но, возможно, это путь Билла Гейтса "640 килобайт достаточно для всех". В любом случае это боль.

1) Самый простой способ это исправить: отключить поддержку XHCI (usb 3.0) в BIOS материнской платы, если это возможно. 2) Трудный способ исправить это: отключить модуль XHCI linux. modprobe -r xhci-hcd Но в большинстве случаев это не работает. Вы должны перекомпилировать ядро, чтобы отключить XHCI и включить OHCI (usb 1.1) и EHXI (usb 2.0).

2

Эта проблема возникает из-за аппаратного контроллера USB, который не может обрабатывать такое количество устройств. Исходный код Linux показывает, что xHC вернул код "ошибка ресурса" при попытке настроить интерфейс. Глава 4.4.6 стандарта xHCI объясняет этот случай:

Переменная «Необходимые ресурсы» сравнивается с переменной «Доступные ресурсы», если результат указывает на превышение подписки ресурсов командой (т. Е. «Доступные ресурсы - требуемые ресурсы» меньше 0), то команда должна быть неудачной, и код завершения ошибки ресурса должен быть возвращается в событии завершения команды. Обратитесь к разделу 4.14.1.1 за дополнительной информацией о ресурсах xHC.

Мой обходной путь - освободить ресурсы xHCI, удалив все USB-устройства, которые мне не нужны, например, внутренние USB-устройства (например, Bluetooth, Wi-Fi и т.д.) И концентраторы USB 3.0, к которым подключены только устройства USB 2.0.

Вот шаги:

  1. Запустите lsusb чтобы увидеть, есть ли что-то неиспользованное.
  2. Удалите неиспользуемые устройства с помощью sysfs echo 1 > /sys/<path to device>/remove . Посмотрите на dmesg и посмотрите, как он удаляет устройство и каждое подчиненное устройство. Это означает, что вы можете удалить целое дерево USB с помощью этой команды на корневом устройстве.
  3. Теперь вы должны быть в состоянии правильно подключить больше устройств (см. Журналы dmesg ).

Чтобы сделать это постоянным при перезагрузке, добавьте правила udev для удаления устройств:

SUBSYSTEM=="usb" <your conditions to match unused devices> RUN="sh -c 'echo 1 > /sys$DEVPATH/remove'"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .