Nicht genügend Hostcontroller-Ressourcen für neuen Gerätestatus

8012
SpiRail

Ich habe ein Debian Mint-basiertes System, in das ich 16 USB-Geräte einstecke. Der Kernal ist: 3.11.0-12-generic Nach ungefähr 10 Geräten habe ich Probleme mit dem Anschluss neuer Geräte. Der Fehler für ein solches Gerät kann in dmesgs wie folgt gefunden werden (die letzten 2 Zeilen unterscheiden sich)

[NEW UPDATE: WORKAROUND] Ich habe festgestellt, dass dieses Problem xhci-spezifisch ist. In meinem BIOS konnte ich xhci tatsächlich deaktivieren und Linux dazu zwingen, auf ehci zurückzugreifen (vermutlich). Jetzt funktionieren alle meine Geräte einwandfrei! Natürlich bedeutet das für mich keine USB3-Geräte. Zum Glück benötigt meine unmittelbare Bewerbung sie nicht. Ich weiß nicht, ob dies ein Intel-Problem oder ein Linux-Problem ist. Es wäre gut, diese Seite zu belassen, weil jemand anderes sie sehr gerne findet.

dmesg | grep -i 3-5.1 

Arbeitsgerät:

[ 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  

Fehlerhaftes Gerät:

[ 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 

Ich habe eine Hardwaretopologie wie folgt: PC -> 4 angetriebene USB-Hubs -> jeweils mit 4 USB-Geräten (1). Diese Geräte sind "Dual-Boot" und Sie können oben sehen, wo sie als Massenspeichergeräte ausgeworfen werden und als serielle Geräte an denselben Ports gesichert werden.

Ich habe die USB-Hubs direkt von der Stromversorgung gespeist, jedes meiner Geräte zieht etwa 700 mA und die 5-V-Leitung fällt auf 4,69 V ab.

Es gibt eine Reihe von USB-Bereichen auf meinem Rechner, da ich davon ausgehe, dass diese mit darunter liegenden Hubs oder Root-Hubs verbunden sind. Das Verschieben der externen Hubs spielt für die Ergebnisse keine Rolle. Experimentell: Ich dachte, dass das Platzieren von Hubs auf Hubs zu größeren Problemen führen würde, aber die Ergebnisse waren die gleichen.

Wenn ich alle Geräte an Strom angeschlossen habe (und Strom zieht), aber nur 3 Hubs am PC angeschlossen sind, ist alles in Ordnung. Wenn ich den 4. Hub einstecke, kann ich in LSUSB sehen, dass alle Geräte vorhanden sind. Es wird jedoch nur 1 von 4 Geräten auf dem letzten Hub angezeigt. In diesem Fall. 3-5.1 ist in Ordnung, aber 3-5.2, 3-5.3 und 3-5.4 scheinen die Treiber nicht zu laden.

Alle Geräte sind identisch, und ich habe bereits Dinge getestet, wie das Vertauschen der Geräte, das Austauschen von Hubs usw. Es sind immer die letzten Geräte, die eingehen. Dies ist sogar der Fall, wenn das letzte Gerät etwas völlig anderes ist als eine Maus oder ein WLAN-Dongle . Das Gerät ist in lsusb sichtbar, funktioniert aber nicht. Ich gehe davon aus, dass dies ein Hinweis auf eine übermäßige USB-Einschränkung des Betriebssystems ist und nicht auf eine treiberspezifische Angelegenheit.

Bei einem Neustart sind es immer noch die letzten 3 Geräte, wenn der Strom gezeichnet wird. JEDOCH. Ich bin auch in der Lage, diese Geräte in einen Zustand zu versetzen, in dem kein Strom fließt und es möglich ist, sie hochzuladen.

Meine Schlussfolgerung ist, dass das Betriebssystem die aktuelle Auslosung liest und eine Einschätzung der Energiequellen vornimmt. Möglicherweise erhalten sie diese Informationen von den Hubs und fügen möglicherweise sogar die Werte zusammen. Es wäre gut zu wissen, ob ich einfach "mehr Host-Controller-Ressourcen" hätte.

[Update] Ich habe hier gefunden, was wie der Quellcode für die Fehlermeldung aussieht: Ich mag das Aussehen von "/ * FIXME: Können wir dem HC mehr Ressourcen zuordnen? * /" Vielleicht bedeutet das auch, dass es einen Weg gibt von Anfang an mehr Ressourcen zuweisen.

Jeder Hinweis wäre großartig, David

5
Verwenden Sie einen 64-Bit-Kernel? Wenn nicht, sollten Sie damit beginnen. Michael Hampton vor 10 Jahren 0

3 Antworten auf die Frage

3
Ken Tindell

Auch ich habe diesen Fehler gefunden (nachdem ich versucht hatte, ein Dutzend USB-Netzwerkschnittstellengeräte anzuschließen). Ich bin mir ziemlich sicher, dass es bei den Geräten kein Stromproblem ist: Sie befinden sich alle auf Hubs und sind innerhalb der aktuellen Grenzen. Ich denke, es geht darum, Interrupts oder eine andere Ressource zuzuweisen.

Ich habe die Umgehung des Deaktivierens von USB 3.0 im BIOS ausprobiert, aber ich vermute, das Motherboard verwendet intern USB 3.0 (für Bluetooth und einige andere Sachen). Es funktionierte nicht (lsusb -t zeigte, dass xhci_hcd verwendet wurde). Ich musste den Kernel neu aufbauen (ich verwende Ubuntu 14.04), um die xhci-Unterstützung zu entfernen, und dann funktionierte es.

Hinweis: Ubuntu übersetzt standardmäßig ehci und xhci in den Kernel - es lädt sie nicht als Module. Ich habe versucht, sie als Module neu aufzubauen, damit ich sie mit modprobe herumspielen konnte, aber das ist fehlgeschlagen, weil:

  1. Wenn ehci ein Modul ist, muss es vor den Modulen ohci und ahci geladen werden (siehe Warnung in dmesg), und alle Methoden, die ich versucht habe, sind fehlgeschlagen (in jedem Fall dachte ich, Kernel-Module müssten unabhängig von der Ladereihenfolge sein?) .

  2. Das xchi-Modul wurde immer geladen, auch wenn es sich auf einer schwarzen Liste befand, vermutlich um mit interner Hardware umzugehen. Nicht so viel untersucht.

Nur durch das Einrichten einer Kernel-Konfiguration, in der ehci und xhci kompiliert wurde, funktionierte es. Ich habe noch nicht getestet, ob USB 3.0 mit dem neuen xhci-freien Kernel erneut aktiviert werden soll.

danke für die veränderung. Wirklich gute Infos. Das Problem für mich beginnt jetzt zu sein, dass es schwieriger wird, gute USB2-Hubs zu bekommen, und der Markt mit USB3-Hubs gefüllt ist. Die Linux-Treiber müssen dies meiner Meinung nach prüfen. Natürlich ... Solches ist Open Source, es könnte an uns liegen :-P SpiRail vor 9 Jahren 0
2
Danil Dar
Not enough host controller resources for new device state.  can't set config #1, error -12 

Mit den gleichen Fehlern konfrontiert. XHCI (USB 3.0) im Linux-Kernel ist auf 32 Geräte beschränkt. Es sieht aus wie ein Fehler. Aber vielleicht ist dies ein Bill Gates-Weg "640 Kilobyte genug für alle". In jedem Fall ist es ein Schmerz.

1) Der einfachste Weg, das Problem zu beheben: Deaktivieren Sie die Unterstützung für XHCI (USB 3.0) im BIOS des Motherboards, wenn möglich. 2) Der harte Weg, das Problem zu beheben: Deaktivieren Sie das XHCI-Linux-Modul. modprobe -r xhci-hcdIn den meisten Fällen funktioniert es jedoch nicht. Sie müssen den Kernel neu kompilieren, um XHCI zu deaktivieren und OHCI (usb 1.1) und EHXI (usb 2.0) zu aktivieren.

2
Julio Guerra

Dieses Problem entsteht durch den zugrunde liegenden USB-Hardware-Controller, der nicht so viele Geräte verarbeiten kann. Linux-Quellcode zeigt an, dass der xHC bei der Konfiguration der Schnittstelle einen "Ressourcenfehler" -Code zurückgegeben hat. In Kapitel 4.4.6 des xHCI-Standards wird dieser Fall erläutert:

Die Variable "Resources Required" wird mit der Variable "Available Available" verglichen. Wenn das Ergebnis eine Überzeichnung der Ressourcen durch den Befehl anzeigt (dh Resources Available - Resources Required ist weniger als 0), ist der Befehl nicht erfolgreich und der Code für einen Ressourcenfehler ist abgeschlossen wird im Befehlsabschlussereignis zurückgegeben. Weitere Informationen zu xHC-Ressourcen finden Sie in Abschnitt 4.14.1.1.

Mein Workaround besteht darin, xHCI-Ressourcen freizugeben, indem jedes nicht benötigte USB-Gerät entfernt wird, z. B. interne USB-Geräte (z. B. Bluetooth, WLAN usw.) und USB 3.0-Hubs, an die nur USB 2.0-Geräte angeschlossen sind.

Hier sind die Schritte:

  1. Laufen, um lsusbzu sehen, ob etwas nicht verwendet wird.
  2. Entfernen Sie Ihre nicht verwendeten Geräte mit sysfs echo 1 > /sys/<path to device>/remove. Schauen Sie sich an dmesgund sehen Sie, wie das Gerät und jedes Subgerät entfernt wird. Dies bedeutet, dass Sie einen gesamten USB-Baum mithilfe dieses Befehls auf dem Root-Gerät entfernen können.
  3. Sie sollten jetzt in der Lage sein, mehr Geräte korrekt anzuschließen (vgl. dmesgProtokolle).

Um dies beim Neustart dauerhaft zu machen, fügen Sie udev-Regeln hinzu, um die Geräte zu entfernen:

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