Não é possível detectar mais de 16 unidades flash USB

2

Estou fazendo um script bash que copia arquivos de uma unidade USB para outras unidades múltiplas.

Uma máquina oldschool rodando o Xubuntu dedicado para o trabalho detecta 30 dispositivos sem problemas. Tem apenas portas USB 2.0.

Enquanto outra máquina moderna rodando o Linux Mint não detecta mais de 16 dessas unidades por vez. Tem apenas portas USB 3.0. Depois de conectar mais de 16 drives, os novos param para aparecer no lsblk.

Qual poderia ser a causa?

EDITAR:

Como fduff apontou, eu verifiquei o dmesg depois de conectar a 17ª unidade USB, é isso que mostra:

[  531.519845] usb 3-9.3.2.6: new high-speed USB device number 46 using xhci_hcd
[  531.974582] usb 3-9.3.2.6: New USB device found, idVendor=abcd, idProduct=1234
[  531.974585] usb 3-9.3.2.6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  531.974586] usb 3-9.3.2.6: Product: UDisk
[  531.974587] usb 3-9.3.2.6: Manufacturer: General
[  531.974588] usb 3-9.3.2.6: SerialNumber: Љ
[  531.975337] usb 3-9.3.2.6: Not enough host controller resources for new device state.
[  531.975340] usb 3-9.3.2.6: can't set config #1, error -12

Isso faz com que pareça uma limitação de hardware, mas o número de dispositivos USB permitidos não é constante.

Agora, por exemplo, não consigo conectar mais de 15 drives USB (o 16 recebe erro -12), antes que eu também conseguisse conectar cerca de 20 dispositivos, e eles foram descobertos corretamente.

Eu tentei usar uma porta USB diferente para distribuir o uso por vários controladores USB, mas sem sorte.

Minhas especificações de hardware:

MB: ASRock Z97 Extreme6
CPU: Intel Core i5-4690K
GPU: MSI GeForce GTX 960 2GB
RAM: HyperX Fury Black 8GB [2x4GB 1600MHz DDR3 CL10 DIMM]
PSU: Chieftec GPS-500A8 [500W]
Display: 2x AOC I2276VWM [IPS, 1920x1080]
HDD: WD Blue 3TB

Também estou usando um hub USB Manhattan de 28 portas: link

Um PC de baixo alcance que executa o Xubuntu do LiveCD (em uma unidade USB) foi capaz de detectar 29 dispositivos (30 contando a unidade LiveCD) e realizar transferências de arquivos - mesmo que o Windows XP tenha instalado no HDD em algum momento Falha ao detectar o hub de 28 portas em tudo. Esse PC agora está sendo analisado por um serviço de reparo, porque ele morreu (eu aposto em PSU ou MB). Ainda assim - funcionou, e o novo brilhante não é.

    
por unfa 10.03.2017 / 11:20

2 respostas

4

Isso pode ser um problema relacionado a hardware. Vi isso no fórum da Intel :

For 8th series motherboard the maximum end points is 96. Each USB device can support multiple end points and how many end points can support vary by device. Once it reaches to the max endpoints, you will get a pop-message; the limitation is not based on number of devices supported but the end points.

e também

It is not the number of devices that is significant, but rather the number of endpoints that those devices use. The fact that you are experiencing the issue on USB 3.0 ports implies the use of a xHCI controller, as opposed to a USB 2.0 eHCI controller. There is a lower limit on Intel's xHCI controller than the eHCI controller. For the xHCI controller it is 96 endpoints. It sounds like you are hitting this endpoint limit. You could use something like Microsoft's USB utility 'USBVIEW' to show you how many endpoints each USB device is using.

There is nothing you can do about it, apart from trying to distribute your devices across multiple USB controllers. This, of course, depends on whether your board has multiple USB controllers, and whether you can figure out which physical USB connectors are routed to which USB controller (again USBVIEW would be useful).

Aproxime-se do tópico do fórum, é bastante interessante.

Você pode usar o seguinte comando para descobrir quantos pontos de extremidade estão listados:

lsusb -v | grep bEndpointAddress | wc -l

    
por 10.03.2017 / 13:06
0

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:03