我需要能够从C程序中识别插入的USB设备(USB3和/或USB2)以及集线器中连接到哪个端口。我正在开发一个基于Yocto的嵌入式Linux系统。
我可以使用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,就会得到ID和名称:
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应用程序轻松地扫描集线器端口并查看哪个设备(名称或ID)连接到何处(集线器端口号)?
如果这个问题已经在某个地方得到了答案,但我找不到具体的答案,我很抱歉。
提前谢谢。
发布于 2020-06-23 23:45:06
如上所述,答案是libusb,我在this question中找到了完整的答案。
同样,libusb的API被定义为here。
https://stackoverflow.com/questions/62426214
复制相似问题