Não há recursos suficientes de controlador de host para o novo estado do dispositivo

5

Eu tenho um sistema baseado no mint da debian onde eu conecto 16 dispositivos USB. O Kernal é: 3.11.0-12-genérico Depois de cerca de 10 dispositivos, começo a ter problemas ao conectar novos. Há erro para um desses dispositivos pode ser encontrado no dmesgs da seguinte maneira (as duas últimas linhas diferem)

[NOVA ATUALIZAÇÃO: WORKAROUND] Eu achei que esse problema é específico para xhci. Na minha bios eu consegui realmente desabilitar o xhci e forçar o linux a retornar ao ehci (presumivelmente). Agora todos os meus dispositivos estão funcionando muito bem !. Claro que isso significa que não há dispositivos USB3 para mim. Felizmente, minha aplicação imediata não exige isso. Eu não sei se isso é um problema de inteligência ou um problema do Linux. Seria bom deixar esta página porque alguém mais gostaria de encontrá-la.

dmesg | grep -i 3-5.1 

dispositivo de trabalho:

[    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 

Dispositivo com falha:

[    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

Eu tenho uma topologia de hardware da seguinte forma: PC - > 4 hubs usb2 alimentados - > cada um com 4 dispositivos usb (1). Esses dispositivos são "dual boot" e você pode ver acima onde eles estão sendo ejetados como dispositivos de armazenamento em massa e inicializando como dispositivos seriais nas mesmas portas.

Eu liguei os hubs USB diretamente da fonte de alimentação, cada um dos meus dispositivos puxa cerca de 700mA e a linha de 5V da fonte cai para 4,69V.

Há várias áreas usb na minha máquina, pois eu entendo que elas estão conectadas a hubs subjacentes ou hubs raiz. Mover os hubs externos não faz diferença nos resultados. Experimentalmente: eu pensei que colocar hubs em hubs levaria a problemas maiores, mas os resultados foram os mesmos.

Quando eu tenho todos os dispositivos conectados à energia (e corrente de desenho), mas apenas 3 hubs conectados ao PC, tudo está bem. Quando eu conecto o 4º hub, eu posso ver na LSUSB que todos os dispositivos estão lá, No entanto, apenas 1 dos 4 dispositivos no último hub é exibido. Nesse caso. 3-5.1 está bem, mas 3-5.2 3-5.3 e 3-5.4 parece não carregar os drivers.

Todos os dispositivos são idênticos e já testei coisas como trocar os dispositivos, trocar hubs, etc. É sempre o último dispositivo a entrar. Isso acontece mesmo se o último dispositivo for algo completamente diferente, como um mouse ou um dongle wifi. O dispositivo ficará visível em lsusb, mas não funcionará. Eu suponho que isso é uma indicação de uma limitação USB excessiva no sistema operacional, em vez de algo que é específico do driver.

Em uma reinicialização, ainda são os últimos 3 dispositivos quando a corrente está sendo desenhada. CONTUDO. Eu também sou capaz de colocar esses dispositivos em um estado em que nenhuma corrente está sendo desenhada e é possível obtê-los.

Minha conclusão é que o sistema operacional está lendo o sorteio atual e fazendo algumas avaliações sobre os recursos de energia. Possivelmente eles estão recebendo essas informações dos hubs e talvez até adicionando os valores juntos. Seria bom saber se eu poderia simplesmente ter "mais recursos de controlador de host"

[atualização] I encontrado aqui o que parece ser o código-fonte da mensagem de erro: Eu não gosto da aparência de "/ * FIXME: podemos alocar mais recursos para o HC? * /" Talvez isso também signifique que há uma maneira de alocar mais recursos desde o início.

Qualquer pista seria ótima David

    
por SpiRail 20.03.2014 / 21:57

3 respostas

3

Eu também acertei esse bug (depois de tentar conectar uma dúzia de dispositivos de interface de rede USB). Eu tenho certeza que não é um problema de corrente elétrica com os dispositivos: eles estão todos em hubs alimentados e bem dentro das limitações atuais. Eu acho que é uma questão de alocar interrupções ou algum outro recurso.

Eu tentei a solução para desabilitar o USB 3.0 no BIOS, mas suspeito que a placa-mãe usasse o USB 3.0 internamente (para Bluetooth e outras coisas), não funcionou (o lsusb -t mostrou que o xhci_hcd estava sendo usado). Eu tive que reconstruir o kernel (estou usando o Ubuntu 14.04) para remover o suporte ao xhci e então funcionou.

Nota: O Ubuntu, por padrão, compila ehci e xhci no kernel - ele não os carrega como módulos. Eu tentei reconstruí-los como módulos para que eu pudesse brincar com eles usando o modprobe, mas isso falhou porque:

  1. Se ehci é um módulo, ele deve ser carregado antes dos módulos ohci e ahci (veja aviso no dmesg), e todas as formas que eu tentei fazer falharam (em qualquer caso, eu pensei que módulos do kernel fossem necessários) ordem de carga independente?).

  2. O módulo xchi sempre foi carregado, mesmo que esteja na lista negra, presumivelmente para lidar com hardware interno. Não investiguei isso, no entanto.

Somente configurando uma configuração do kernel onde o ehci foi compilado e o xhci foi compilado, funcionou. Eu não testei a reativação do USB 3.0 na BIOS com o novo kernel livre de xhci.

    
por 11.08.2014 / 17:54
2
Not enough host controller resources for new device state.

can't set config #1, error -12

Enfrentou os mesmos erros. O XHCI (usb 3.0) no kernel do Linux é limitado a 32 dispositivos. Parece um bug. Mas talvez seja uma maneira de Bill Gates "640 kilobytes suficientes para todos". De qualquer forma, é uma dor.

1) A maneira mais fácil de corrigi-lo: desative o suporte a XHCI (usb 3.0) no BIOS da placa-mãe, se possível. 2) A maneira mais difícil de consertá-lo: desabilitar o módulo linux XHCI. modprobe -r xhci-hcd Mas na maioria dos casos não funciona. Você deve recompilar o kernel para desabilitar o XHCI e habilitar o OHCI (usb 1.1) e o EHXI (usb 2.0).

    
por 30.08.2016 / 11:11
2

Esse problema vem do controlador de hardware USB subjacente, que não consegue lidar com tantos dispositivos. O código-fonte do Linux mostra que o xHC retornou um código de "erro de recurso" ao tentar configurar a interface. O capítulo 4.4.6 do padrão xHCI explica este caso:

The Resources Required variable is compared to the Resources Available variable, if the result indicates an oversubscription of resources by the command (i.e. Resources Available - Resources Required is less than 0), then the command shall be unsuccessful and a Resource Error Completion Code shall be returned in the Command Completion Event. Refer to section 4.14.1.1 for more information on xHC resources.

Minha solução é liberar recursos xHCI removendo todos os dispositivos USB que não preciso, como dispositivos USB internos (por exemplo, bluetooth, wifi, etc.) e hubs USB 3.0 com apenas dispositivos USB 2.0 conectados a eles.

Aqui estão os passos:

  1. Execute lsusb para ver se há algo não usado.
  2. Remova seus dispositivos não utilizados usando sysfs echo 1 > /sys/<path to device>/remove . Dê uma olhada em dmesg e veja como ele remove o dispositivo e todos os sub-dispositivos. O que significa que você pode remover uma árvore USB inteira usando este comando no dispositivo raiz.
  3. Agora você deve conseguir conectar corretamente mais dispositivos (cf. dmesg logs).

Para tornar isso persistente ao reinicializar, adicione regras do udev para remover os dispositivos:

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