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:
_
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:
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?
o que acontece a seguir? Isso deve estar visível em udevadm
?
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
?
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:
FWIW:
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 1e68:001b TrekStor GmbH & Co. KG DataStation maxi g.u