Мне нужно иметь возможность идентифицировать подключенное USB-устройство (USB3 и / или USB2) и к какому порту подключен концентратор из программы C. Я работаю над встроенной системой Linux на основе Yocto.
Я могу получить эту информацию из командной строки с помощью lsusb. Например, я подключил две USB-камеры, одну USB3 и другую USB2, и если я запустил lsusb -t
, я могу увидеть дерево подключений портов:
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 4: Dev 6, If 0, Class=Miscellaneous Device, Driver=, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 3, If 2, Class=Human Interface Device, Driver=usbhid, 480M
Благодаря этому я легко знаю, что камера USB3 подключен к порту 4, а USB2 - к порту 3 (с помощью 4-портового концентратора). Если я запустил только lsusb
, получил идентификаторы и имена:
Bus 002 Device 006: ID 20f7:3001 USB3 Camera with CMOS sensor [MQ]
Bus 001 Device 003: ID 0403:de37 Future Technology Devices International, Ltd
Bus 001 Device 002: ID 04b4:650a Cypress Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 04b4:6508 Cypress Semiconductor Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Как я могу легко просканировать порты концентратора и посмотреть, какое устройство (имя или идентификатор) подключено, где (номер порта концентратора) из C application?
Прошу прощения, если где-то уже есть ответ, но я не смог найти конкретный c ответ.
Заранее спасибо.