Como adicionar manualmente um dispositivo que o udev adiciona, em seguida, remove depois de conectado à porta USB?

0

Estou tentando montar meu relógio inteligente barato com um chipset MTK6260A no meu PC para ler o conteúdo do firmware. No entanto, enquanto o dmesg me mostra que o dispositivo foi detectado e criado corretamente:

[107204.279493] sd 12:0:0:0: [sdf] Test WP failed, assume Write Enabled
[107204.280474] sd 12:0:0:0: [sdf] Asking for cache data failed
[107204.280486] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[107204.281588] sd 12:0:0:0: [sdf] Attached SCSI removable disk

udev cria, em seguida, remove-o (do monitor do udevadm):

KERNEL[107206.407012] add      /devices/virtual/bdi/8:80 (bdi)
KERNEL[107206.407083] add      /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0/block/sdf (block)
UDEV  [107206.407522] add      /devices/virtual/bdi/8:80 (bdi)
KERNEL[107206.408114] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0/scsi_disk/12:0:0:0 (scsi_disk)
KERNEL[107206.408199] remove   /devices/virtual/bdi/8:80 (bdi)
KERNEL[107206.408241] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0/block/sdf (block)
KERNEL[107206.408270] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0 (scsi)
UDEV  [107206.408524] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0/scsi_disk/12:0:0:0 (scsi_disk)
UDEV  [107206.408806] remove   /devices/virtual/bdi/8:80 (bdi)
KERNEL[107206.420107] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0 (scsi)
KERNEL[107206.436186] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/scsi_host/host12 (scsi_host)
KERNEL[107206.436204] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12 (scsi)
UDEV  [107206.436828] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/scsi_host/host12 (scsi_host)
UDEV  [107206.470749] add      /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0/block/sdf (block)
UDEV  [107206.473577] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0/block/sdf (block)
UDEV  [107206.474781] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0/12:0:0:0 (scsi)
UDEV  [107206.475165] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12/target12:0:0 (scsi)
UDEV  [107206.475565] remove   /devices/pci0000:00/0000:00:14.0/usb3/3-11/3-11:1.0/host12 (scsi)

Existe alguma maneira de adicionar o dispositivo manualmente?

    
por Gabriel Diego 06.07.2018 / 01:42

1 resposta

1

(Eu vou fazer isso uma resposta e adicionar a ele, mesmo que eu não tenha uma solução pronta. É muito estranho nos comentários.)

O problema não é udev , então "debugging udev" não ajudará. udev apenas reage ao sinal vindo do .408114 do kernel.

Supondo que não há outras mensagens em dmesg do que você mostrou (o que significa "nenhuma", não "nenhuma que você esteja relacionada"; caso contrário, edite a pergunta com a parte antes e depois do snippet), nós sabemos é que o kernel tenta enviar comandos para o relógio inteligente para descobrir mais sobre o dispositivo de armazenamento, e ambos (proteção contra gravação e cache) falham. Depois disso, o kernel possivelmente faz mais interação e, finalmente, decide que este não é um dispositivo de armazenamento USB, porque não responde ou retorna erros. Assim, o kernel remove-o da camada de armazenamento, envia um sinal para udev e udev faz o que deve e remove os nós do dispositivo. Mesmo se você impedir que udev remova os nós do dispositivo, eles não estarão presentes no nível do kernel, portanto, eles serão inúteis.

O que você pode fazer é usar usbmon para farejar os pacotes USB entre o PC e o smartwatch. wireshark pode interpretar isso. Se você quiser depurar isso, precisará ler como funciona o USB, como funciona o armazenamento USB e como funcionam os comandos SCSI que fazem a camada de armazenamento USB funcionar. Isso pode ou não dar uma pista do que está errado. Os padrões não são difíceis de encontrar com um pouco de googling.

Também é possível que o relógio inteligente barato simplesmente não implemente o padrão de armazenamento USB corretamente, e tenha um driver especial do Windows escrito pelo fabricante que esconde esse fato. Nesse caso, você também pode farejar o tráfego USB no Windows para descobrir como ele funciona, mas você terá que escrever seu próprio kernel do Linux ou o driver do userspace para ele, o que é muito trabalho.

    
por 07.07.2018 / 09:43

Tags