【问题标题】:Check USB device ID and connected port from C application从 C 应用程序检查 USB 设备 ID 和连接的端口
【发布时间】:2020-06-17 09:52:00
【问题描述】:

我需要能够识别插入的 USB 设备(USB3 和/或 USB2)以及通过 C 程序连接到集线器中的哪个端口。我正在开发基于 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)(集线器端口号)?

如果这已经在某个地方回答但我找不到具体的答案,请道歉。

提前致谢。

【问题讨论】:

  • 这能回答你的问题吗:unix.stackexchange.com/questions/61484/…?
  • 谢谢你的回答,我还没有看到那个,我会尝试解决方案,看看效果如何。
  • 我尝试了建议的解决方案,但它对我不起作用,无法编译程序。我想知道是不是因为我正在制作一个 yocto 图像......任何其他想法都会非常感激。
  • 您需要在 Yocto 映像上安装 libusb 库之一。快速的谷歌搜索显示这些库有可用的食谱。如果您想生成类似于lsusb -t 的输出并获取集线器端口号,您可能需要安装libusb1,否则libusb-compat 应该可以完成这项工作

标签: c linux usb lsusb


【解决方案1】:

正如所指出的,答案是 libusb,我在this question 中找到了完整的答案和一个示例。

libusb 的 API 也被定义为 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多