我正在编写一个程序,用于libudev
检测系统上的 USB 设备连接。我想知道连接的每个设备的类型是什么。我认为 udev 没有明确说明 USB 的类型,例如我想知道连接的设备是打印机、网络摄像头还是键盘。我怎样才能做到这一点?任何想法?
答案1
任何 USB 设备的类型均使用bDeviceClass
和bDeviceSubClass
属性来标识,其值由相关 USB 协议规范定义:请参阅https://www.usb.org/define-class-codes获取类别代码列表。
如果 USB 设备具有多种功能,您可能还需要检查bInterfaceClass
和bInterfaceSubClass
属性,以识别各个功能。
如果类代码结果为0xff
,这意味着“特定于供应商”,您很可能需要识别实际的设备模型(使用idProduct
和idVendor
属性)来确定设备是什么。
答案2
我认为udev没有明确说明USB的类型是什么,
udev 基本上以属性的形式报告内核所知道的有关 USB 设备的所有信息,例如供应商和产品 ID 以及类别。看看例如这些示例规则并查看 USB 设备上的属性以查看更多信息。
对于例如键盘 (HID) USB 设备和摄像头来说,已经有相当多的自动化正在进行,因此无论您正在编写什么,请确保它符合现有的 udev 规则和内核操作。