7 votes

Pas assez de ressources du contrôleur hôte pour le nouvel état du dispositif

J'ai un système basé sur debian mint où je branche 16 périphériques usb. Le Kernal est : 3.11.0-12-generic Après une dizaine de périphériques, je commence à rencontrer des problèmes pour en connecter de nouveaux. L'erreur pour un de ces périphériques peut être trouvée dans les dmesgs comme suit (les 2 dernières lignes diffèrent)

[NOUVELLE MISE À JOUR : SOLUTION DE CONTOURNEMENT] J'ai découvert que ce problème est spécifique à xhci. Dans mon bios, j'ai pu désactiver xhci et forcer Linux à revenir à ehci (vraisemblablement). Maintenant, tous mes périphériques fonctionnent très bien ! Bien sûr, cela signifie qu'il n'y a pas de périphériques USB3 pour moi. Heureusement, mon application immédiate n'en a pas besoin. Je ne sais pas si c'est un problème intel ou un problème linux. Il serait bon de laisser cette page en place car quelqu'un d'autre est très susceptible de la trouver.

dmesg | grep -i 3-5.1 

dispositif de travail :

[    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 

Dispositif défaillant :

[    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

J'ai une topologie matérielle comme suit : PC -> 4 hubs usb2 alimentés -> chacun avec 4 périphériques usb(1). Ces périphériques sont "dual boot" et vous pouvez voir ci-dessus où ils sont éjectés comme périphériques de stockage de masse et redémarrent comme périphériques série sur les mêmes ports.

J'ai alimenté les hubs USB directement à partir de l'alimentation, chacun de mes appareils consomme environ 700mA. et la ligne 5V de l'alimentation tombe à 4.69V.

Il y a un certain nombre de zones usb sur ma machine, si j'ai bien compris, elles sont connectées à des hubs sous-jacents ou à des hubs racine. Le fait de déplacer les hubs externes ne change rien aux résultats. Expérimentalement : Je pensais que le fait de placer des hubs sur des hubs entraînerait des problèmes plus importants, mais les résultats sont les mêmes.

Lorsque tous les appareils sont branchés sur le secteur (et consomment du courant), mais que seuls 3 concentrateurs sont branchés sur le PC, tout va bien. Lorsque je branche le 4ème hub, je peux voir dans LSUSB que tous les périphériques sont là, Cependant, seul 1 des 4 appareils sur ce dernier hub s'affiche. Dans ce cas. 3-5.1 va bien, mais 3-5.2 3-5.3 et 3-5.4 semblent ne pas charger les pilotes.

Tous les appareils sont identiques et j'ai déjà testé des choses comme l'échange d'appareils, l'échange de concentrateurs, etc. Ce sont toujours les derniers appareils qui entrent en jeu. Cela se produit même si le dernier périphérique est quelque chose de complètement différent comme une souris ou un dongle wifi. Le périphérique sera visible dans lsusb, mais il ne fonctionnera pas. Je suppose que c'est une indication d'une limitation USB sous-jacente du système d'exploitation, plutôt que quelque chose de spécifique au pilote.

Lors d'un redémarrage, il s'agit toujours des 3 derniers appareils lorsque le courant est tiré. CEPENDANT. Je suis également capable de mettre ces appareils dans un état où aucun courant n'est tiré et il est possible de les faire fonctionner.

Ma conclusion est que le système d'exploitation lit l'appel de courant et fait une évaluation des ressources énergétiques. Il est possible qu'il obtienne ces informations des hubs et qu'il additionne les valeurs. Il serait bon de savoir si je peux simplement avoir "plus de ressources de contrôleur hôte".

[mise à jour] Je trouvé ici ce qui semble être le code source du message d'erreur : Je n'aime pas l'aspect de "/* FIXME : pouvons-nous allouer plus de ressources pour le HC ? */" Peut-être que cela signifie également qu'il existe un moyen d'allouer plus de ressources dès le départ.

Tout indice serait le bienvenu David

4voto

Ken Tindell Points 56

J'ai également rencontré ce problème (après avoir essayé de connecter une douzaine de périphériques d'interface réseau USB). Je suis presque sûr qu'il ne s'agit pas d'un problème de courant électrique avec les périphériques : ils sont tous sur des concentrateurs alimentés et sont bien dans les limites de courant. Je pense qu'il s'agit d'un problème d'allocation d'interruptions ou d'une autre ressource.

J'ai essayé de désactiver l'USB 3.0 dans le BIOS mais je soupçonne la carte mère d'utiliser l'USB 3.0 en interne (pour Bluetooth et d'autres choses), cela n'a pas fonctionné (lsusb -t a montré que xhci_hcd était utilisé). J'ai dû reconstruire le noyau (j'utilise Ubuntu 14.04) pour supprimer le support xhci et cela a fonctionné.

Note : Ubuntu compile par défaut ehci et xhci dans le noyau - il ne les charge pas en tant que modules. J'ai essayé de les reconstruire en tant que modules afin de pouvoir jouer avec eux en utilisant modprobe mais cela a échoué car :

  1. Si ehci est un module, il doit être chargé avant les modules ohci et ahci (voir l'avertissement dans dmesg), et toutes les façons dont j'ai essayé de le faire ont échoué (de toute façon, je pensais que les modules du noyau devaient être indépendants de l'ordre de chargement ?)

  2. Le module xchi finit toujours par être chargé, même s'il est sur liste noire, probablement pour gérer le matériel interne. Je n'ai pas beaucoup enquêté sur ce point, cependant.

Ce n'est qu'en configurant un noyau dans lequel ehci est compilé et xhci est compilé hors que cela a fonctionné. Je n'ai pas testé la réactivation de l'USB 3.0 dans le BIOS avec le nouveau noyau sans xhci.

3voto

Danil Dar Points 31
Not enough host controller resources for new device state.

can't set config #1, error -12

Confrontés aux mêmes erreurs. XHCI (usb 3.0) dans le noyau linux est limité à 32 périphériques. Cela ressemble à un bug. Mais peut-être que c'est une manière de Bill Gates "640 kilobytes suffisant pour tout le monde". En tout cas, c'est une douleur.

1) Le moyen le plus simple de le corriger : désactiver le support XHCI (usb 3.0) dans le BIOS de la carte mère si possible. 2) La façon la plus difficile de le réparer : désactiver le module linux XHCI. modprobe -r xhci-hcd Mais dans la plupart des cas, cela ne fonctionne pas. Vous devez recompiler le noyau pour désactiver XHCI et activer OHCI (usb 1.1) et EHXI (usb 2.0).

2voto

Julio Guerra Points 143

Ce problème provient du contrôleur matériel USB sous-jacent qui ne peut pas gérer autant de périphériques. Le code source de Linux montre que le xHC renvoie un code "resource error" lorsqu'il essaie de configurer l'interface. Le chapitre 4.4.6 de la norme xHCI explique ce cas :

La variable des ressources requises est comparée aux ressources disponibles. si le résultat indique une sursouscription des ressources par le la commande (c.-à-d. Ressources disponibles - Ressources requises est inférieur à inférieure à 0), la commande échoue et un code d'achèvement d'erreur de ressource est renvoyé dans le message d'achèvement de la commande. est renvoyé dans l'événement d'achèvement de la commande. Voir la section 4.14.1.1 pour plus d'informations sur les ressources xHC.

Ma solution consiste à libérer les ressources xHCI en supprimant tous les périphériques USB dont je n'ai pas besoin, tels que les périphériques USB internes (par exemple, Bluetooth, wifi, etc.) et les hubs USB 3.0 auxquels ne sont attachés que des périphériques USB 2.0.

Voici les étapes :

  1. Exécuter lsusb pour voir s'il y a quelque chose de non utilisé.
  2. Supprimez vos périphériques inutilisés en utilisant sysfs echo 1 > /sys/<path to device>/remove . Jetez un coup d'œil à dmesg et voyez comment il supprime le dispositif et chaque sous-dispositif. Ce qui signifie que vous pouvez supprimer une arborescence USB entière en utilisant cette commande sur le périphérique racine.
  3. Vous devriez maintenant être en mesure de brancher correctement plus de périphériques (cf. dmesg logs).

Pour que cela soit persistant au redémarrage, ajoutez des règles udev pour supprimer les périphériques :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X