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

0

Я пытаюсь смонтировать мои дешевые умные часы с набором микросхем 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)

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

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

Ответы:

1

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

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

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

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

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

dirkt
источник