Как вручную добавить устройство, которое udev добавляет, а затем удаляет после подключения к USB-порту?

273
Gabriel Diego

Я пытаюсь установить мои дешевые умные часы с набором микросхем MTK6260A на мой ПК, чтобы прочитать содержимое прошивки. Однако пока dmesg показывает мне, что устройство было обнаружено и создано правильно:

[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 создает, а затем удаляет его (из монитора 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) 

Есть ли способ добавить обратно устройство вручную?

0
Первым шагом было бы выяснить, * почему * диск удаляется: если ядро ​​обнаружит ошибку при попытке доступа к устройству, оно удалит его, что, возможно, может быть тем, что происходит в соответствии с журналом (удаление происходит из KERNEL). Если это так, то нет, вы не можете создать его вручную. Вопрос в том, почему нет сообщений об ошибках, показывающих проблему. dirkt 6 лет назад 1
@dirkt Спасибо за понимание. Вы знаете, как отлаживать Udev? Я думал, нажимая команды USB низкого уровня, чтобы понять, знаете ли вы, как это сделать? Gabriel Diego 6 лет назад 0

1 ответ на вопрос

1
dirkt

(Я сделаю это ответ и добавлю к нему, хотя у меня нет готового решения. Это просто слишком неудобно в комментариях.)

Проблема не в этом udev, поэтому «отладка udev» не поможет. udevпросто реагирует на сигнал, поступающий в .408114 от ядра.

Предполагая, что нет никаких других сообщений, dmesgкроме тех, которые вы показали (что означает «вообще ничего», а не «ничего, что вы считаете связанным», в противном случае, пожалуйста, отредактируйте вопрос с частью до и после вашего фрагмента), все, что мы знаем, это то, что ядро пытается отправить команды на смарт-часы, чтобы узнать больше об устройстве хранения, и оба (защита от записи и кэш) не работают. После этого ядро, возможно, больше взаимодействует и в итоге решает, что это не USB-устройство хранения данных, потому что оно не отвечает или возвращает ошибки. Таким образом, ядро ​​удаляет его со слоя хранения, отправляет сигнал udevи udevделает то, что должно, и удаляет узлы устройства. Даже если вы не сможете udevудалить узлы устройства, они не будут присутствовать на уровне ядра, поэтому они будут бесполезны.

Что вы можете сделать, это использовать usbmonдля прослушивания пакетов USB между ПК и умными часами. wiresharkможет интерпретировать те. Если вы хотите отладить это, вам нужно прочитать о том, как работает USB, как работает USB-накопитель и как работают команды SCSI, которые обеспечивают работу USB-накопителя. Это может или не может дать намек на то, что идет не так. Стандарты не сложно найти, немного погуглив.

Также возможно, что дешевые умные часы просто неправильно реализуют стандарт USB-накопителя и имеют специальный драйвер Windows, написанный производителем, который скрывает этот факт. В этом случае вы также можете прослушать USB-трафик в Windows, чтобы выяснить, как он работает, но тогда вам придется написать собственное ядро ​​Linux или драйвер для пользовательского пространства, что является большой работой.