Мне нужно получить название подключенного USB-устройства. Я могу сделать это с lsusb
.
Когда я пишу правила, udev допускает некоторые замены: скажем, мы можем использовать, $kernel
чтобы получить имя устройства или $devpath
получить путь к устройству.
Но проблема в том, что lsusb
возвращает такую строку:
Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Но Devath путь Udev является:
/devices/pci0000:00/0000:00:1d.0/usb5/5-2
Номер шины тот же ( 5
), но номера разные: Device 032
кажется, что это логическое число (когда я снова подключаю устройство, это число увеличивается), и 2
кажется , что это номер физического устройства.
Итак, udev возвращает физический номер, и мне нужно получить логический номер. Затем я могу получить данные, как это:lsusb -D /dev/bus/usb/005/032
Итак, как я могу получить логический номер устройства 032
по физическому пути, как /devices/pci0000:00/0000:00:1d.0/usb5/5-2
?
udev
против»lsusb
и «sys/devices/..
против»,/dev/bus/usb/..
и, судя по вашему ответу, вы, кажется, в курсе :) Может быть, вы можете пролить свет на эти два вопроса? askubuntu.com/questions/342061/power-on-off-usb-ports and askubuntu.com/questions/498950/…/sys/devices/...
vs/dev/...
:/sys
заполняется ядром, это представление реальной иерархии устройств ядра. Udev - это демон пользовательского пространства, который обрабатывает/sys
иерархию и заполняет ее/dev/...
(принимая во внимание правила). Итак, udev полностью отвечает за/dev
содержимое.Принятый ответ действительно не очень помог мне. Я наконец нашел способ, исследуя idProduct и idVendor, если они существуют. Вот сценарий оболочки
Вот что я получаю в своей системе.
Здесь я вижу, что, например
0a5c:21e6
, устройство Bluetooth, отображается на2-1.4
.Для еще большего удобства вы можете определить это как функцию в вашей оболочке, что-то вроде
источник