Wie fügt man manuell ein Gerät hinzu, das von udev hinzugefügt und dann nach dem Anschließen an den USB-Anschluss entfernt wird?

313
Gabriel Diego

Ich versuche, meine billige Smartwatch mit einem MTK6260A-Chipsatz an meinen PC zu montieren, um den Inhalt der Firmware zu lesen. Allerdings zeigt mir dmesg, dass das Gerät erkannt und korrekt erstellt wurde:

[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 erstellt es und entfernt es dann (von udevadm monitor):

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) 

Gibt es eine Möglichkeit, das Gerät manuell zurückzusetzen?

0
Der erste Schritt wäre, herauszufinden, * warum * das Laufwerk entfernt wird: Wenn der Kernel beim Versuch, auf das Gerät zuzugreifen, einen Fehler feststellt, wird er es entfernen. Dies kann möglicherweise der Fall sein, der gemäß dem Protokoll geschieht (Remove stammt von KERNEL). Wenn dies der Fall ist, können Sie es nicht manuell erstellen. Die Frage ist dann, warum es keine Fehlermeldungen gibt, die das Problem anzeigen. dirkt vor 5 Jahren 1
@dirkt Danke für die Einsicht. Wissen Sie, wie Sie udev debuggen können? Ich habe mir überlegt, wie ich auf die Low-Level-USB-Befehle tippe, um eine Idee zu bekommen. Wissen Sie, wie das geht? Gabriel Diego vor 5 Jahren 0

1 Antwort auf die Frage

1
dirkt

(Ich werde dies zu einer Antwort machen und ergänzen, auch wenn ich keine fertige Lösung habe. In den Kommentaren ist das einfach zu umständlich.)

Das Problem ist nicht udevso, dass "Debugging udev" nicht helfen wird. udevreagiert nur auf das Signal, das bei .408114 vom Kernel kommt.

Angenommen, es gibt keine anderen Nachrichten, dmesgals Sie gezeigt haben (was bedeutet "keine", nicht "keine, von der Sie denken, dass sie verwandt sind", andernfalls bearbeiten Sie bitte die Frage mit dem Teil vor und nach Ihrem Snippet) versucht, Befehle an die Smart Watch zu senden, um mehr über das Speichergerät zu erfahren, und beide (Schreibschutz und Cache) schlagen fehl. Danach führt der Kernel möglicherweise mehr Interaktion aus und entscheidet schließlich, dass dies kein USB-Speichergerät ist, da er nicht antwortet oder Fehler zurückgibt. Der Kernel entfernt ihn also von der Speicherebene, sendet ein Signal an udev, udevtut was er soll und entfernt die Geräteknoten. Selbst wenn Sie das udevEntfernen der Geräteknoten verhindern möchten, sind sie nicht auf der Kernel-Ebene vorhanden, daher sind sie unbrauchbar.

Was Sie tun können, ist, um usbmondie USB-Pakete zwischen dem PC und der Smartwatch zu erfassen. wiresharkkann das interpretieren. Wenn Sie dies debuggen möchten, müssen Sie wissen, wie USB funktioniert, wie USB-Speicher funktioniert und wie die SCSI-Befehle funktionieren, mit denen die USB-Speicherebene funktioniert. Dies kann einen Hinweis darauf geben, was schief geht. Die Standards sind nicht schwer zu finden und ein bisschen googeln.

Es ist auch möglich, dass die billige Smartwatch den USB-Speicherstandard nicht richtig implementiert und einen speziellen Windows-Treiber hat, der vom Hersteller geschrieben wurde, was diese Tatsache verbirgt. In diesem Fall können Sie auch den USB-Datenverkehr unter Windows ausfindig machen, um herauszufinden, wie es funktioniert. Dann müssen Sie jedoch einen eigenen Linux-Kernel oder einen eigenen Userspace-Treiber dafür schreiben. Dies ist eine Menge Arbeit.