【问题标题】:libudev returns duplicated usb deviceslibudev 返回重复的 USB 设备
【发布时间】:2012-08-05 02:20:55
【问题描述】:

我正在创建一个程序来列出 Linux 中的所有 USB 设备(在我的例子中是 Ubuntu)。 我一直在关注本教程http://www.signal11.us/oss/udev/ 并将子系统从“hidraw”更改为“usb”。

它很好地列出了设备,但它包含重复项。

我显然可以使用我的代码删除重复项,但我想知道您是否知道如何以不会返回重复项的方式设置设备枚举。

如果你想看看我的代码(没有太大变化),它位于https://github.com/DiogoNeves/LinuxUsbTest

谢谢!

【问题讨论】:

    标签: c linux usb udev


    【解决方案1】:

    对于我的系统,我看到我的 USB 摄像头重复了,但这是正确的行为,因为它占用了 udev 中的多个插槽。当我执行udevadm info --attribute-walk --name=video0 时,我看到一个 USB 端点条目和一个 USB 设备条目。如果一个设备有很多端点,无疑会在 udev 中多次列出。要删除“重复项”,您可以过滤仅存在于父 USB 设备而非端点中的其他属性。

    如果您正在扫描 USB 设备,使用 libusb-1.0 可能更有意义,因为它可以“更好地”查看 USB 设备。

    【讨论】:

    • 谢谢,查看通用属性,之后会查看 libusb :)
    • 我在我正在寻找的级别上找到了一个共同的属性,如果我搜索属性maxchild=0,这在我的脑海中几乎是有道理的,但我不喜欢巧合的编程......你知道它的真正含义吗?谢谢
    • maxchild是当前设备下存在的USB设备数量。查看linux/drivers/usb/core/devices.c。除了内核源代码或 USB 描述符规范之外,我不确定这些是否记录在任何地方。
    • 是的,在查看了它转储设备信息的方式之后,除非我遗漏了什么,if maxchild == 0 如果应该是设备节点的叶子。我想这就是我要找的!我会继续阅读以防万一;)谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多