如何在 Linux 上读取 USB 设备的二进制设备对象存储 (BOS) 描述符



我需要以编程方式读取插入Linux系统(Ubuntu 18.04(的USB设备的设备描述符。我可以通过解析lsusb输出或直接从usbfs文件中读取/sys/bus/usb/devices/来读取我需要的大部分描述符(iSerial、iProduct 等(。但是,我在使用任一方法查找二进制设备对象存储 (BOS( 描述符时遇到问题。

我想我可以使用libusb查询BOS,但似乎由于这是USB规范标准描述符,因此可能有一种更简单的方法。是否可以直接从usbfs读取它,或者从标准实用程序(如lsusb或其他工具(查询它?

BOS 描述符可以通过控制转移获得。控制传递参数为:

bm请求类型: 0x80, b请求:0x06, w值:0x0F00, w指数: 0x0000,

标头 BOS 描述符为:

struct usb_bos_descriptor_header {
u8_t bLength;
u8_t bDescriptorType;
u16_t wTotalLength;
u8_t bNumDeviceCaps;
};

我们还可以使用 https://github.com/libusb/libusb/blob/master/examples/xusb.c 来获取 BOS 描述符。

最新更新