O dispositivo USB que está sendo conectado não é visto pelo 'monitor udevadm --kernel --property'

2

Eu tenho um disco rígido USB. Quando eu o conecto no meu barramento xhci_hcd, então normalmente ele não será listado por lsusb . Se eu fizer udevadm monitor --kernel --property , nenhum sinal do dispositivo sendo conectado aparecerá.

Existem duas coisas que acabarão por tornar o dispositivo visível ou em combinação ou sozinho:

  • fechando a tampa (e, assim, enviando o sistema para suspensão no estado RAM)
  • desligando e religando o driver USB ao barramento USB:

_

echo -n 0000:19:00.0 > /sys/bus/pci/drivers/xhci_hcd/unbind
echo -n 0000:19:00.0 > /sys/bus/pci/drivers/xhci_hcd/bind

Eu gostaria de entender como funciona a detecção, ou seja, qual é a camada que está "com defeito" aqui e por que ?

Tanto quanto eu sei:

  1. o primeiro passo na comunicação entre o dispositivo e o host é que o dispositivo insere uma resistência no circuito elétrico que torna o host (ou o hub?) ciente da presença física (elétrica) do dispositivo. Isso está correto? O HW (o hub / o barramento?) Sinaliza esse evento elétrico (para o motorista do barramento)? O udevadm monitor --kernel --property deve mostrar-me este evento? Se não há mais alguma coisa que possa me mostrar esse evento no lado do host?

  2. o que acontece a seguir? Isso deve estar visível em udevadm ?

  3. a "camada de transporte" da pilha USB assume o controle e o host envia um pacote de controle USB para o dispositivo, solicitando seus IDs de fornecedores e produtos. Quem é responsável por fazer isso? Isso já é o software de driver de ônibus fazendo isso ou ainda está em "hardware" (ou seja, software on hub / barramento USB do laptop)? Isso deve estar visível em udevadm ?

  4. o host recebe a resposta do dispositivo e agora sabe qual é o dispositivo VID / PID. Isso significa necessariamente que o dispositivo estaria visível em lsusb neste ponto?

Eu vasculhei as internets, mas ainda não encontrei um documento "como funciona a detecção de dispositivo (função) com USB". Falta de ler as 670+ páginas da especificação USB - alguém pode me dizer:

  • quais etapas acima são executadas pelo hardware (o hub e seu SW interno)?
  • ponto em que o driver é notificado (um evento, interrupção, sondagens ou o que for)?
  • estão lá (melhor? mais especializado?) ferramentas que seriam capazes de me dizer mais cedo no processo o que está acontecendo (falta de adicionar instruções de depuração para o driver de barramento USB)?

FWIW:

  • o barramento é um Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
  • e o dispositivo é uma unidade Bus 002 Device 002: ID 1e68:001b TrekStor GmbH & Co. KG DataStation maxi g.u
  • kernel do Debian 3.16.0-4-amd64
por Tomáš Pospíšek 16.12.2017 / 00:15

0 respostas