Я пишу модуль Python для устройства, которое взаимодействует с предоставленной пользователем картой памяти USB. Пользователь может вставить карту памяти USB в слот USB устройства, и устройство будет выгружать данные на карту памяти без вмешательства пользователя. Если устройство работает, когда пользователь вставляет USB-флешку, я подключился к D-Bus, и у меня все готово. Новая проблема в том, что если карта памяти вставлена, когда устройство выключено? Я не получаю ни события вставки D-Bus, ни каких-либо связанных частей информации о карте памяти после включения устройства.
Я разработал способ получения узла устройства (/ dev / sd?) Из сканирования устройств USB в / proc, вызвав:
ls /proc/scsi/usb-storage
это дает информацию об устройстве scsi, если вы просматриваете каждый из файлов в этой папке.
Затем я беру поля Vendor, Product и Serial Number из записей usb-storage, генерирую строку идентификатора, которую затем использую в
ll /dev/disc/by-id/usb_[vendor]<code>_[product]
_ [serial_number] -0: 0
Так что я могу проанализировать результат, чтобы получить относительный путь
../../sdc
Затем я могу подключить USB-накопитель.
Это громоздкая процедура, в значительной степени основанная на тексте, и готовая к ошибкам, когда кто-то вводит странный символ или нестандартную строку серийного номера. Он работает со всеми 2 USB-накопителями, которые у меня есть. Я пытался отобразить вывод из / var / log / messages, но это также приводит к сопоставлению текста. Вывод lsusb, fdisk, udevinfo, lsmod и других показывает только половину требуемых данных.
Мой вопрос: как определить, при отсутствии сообщения D-Bus, устройство / dev, назначенное карте памяти USB, без вмешательства пользователя или заранее зная особенности вставленного устройства?
Спасибо, извините за роман.