我想检索 wLength(可以由隐藏设备指定)。明确的答案可能是向设备发送 ctrl 信号。但是我通过下面的代码试了一下:
struct usbfs_ctrltransfer ctrl = {
.bmRequestType = LIBUSB_ENDPOINT_IN,
.bRequest = LIBUSB_REQUEST_GET_CONFIGURATION,
.wValue = 0,
.wIndex = 0,
.wLength = 1,
...
}
....
r = ioctl(fd, 0, &ctrl);
....
这段代码的结果只是一个错误值(我认为是 -1!)。 我在 Debug模式下重新加载了 hid 模块(内核模块)(modprobe hid debug=100 --> 不要为这个大的调试级别 panic !)。在这种情况下,hid 会打印出 wLength 的真实值。
/build/buildd/linux-3.13.0/drivers/hid/usbhid/hid-core.c: submitting ctrl urb: Get_Report wValue=0x0100 wIndex=0x0001 wLength=64
我在linux kernel source code中跟踪了一下,发现在usb_get_intfdata中打印了这个信息。 总而言之,我想知道在用户空间中是否存在相同的功能?
最佳答案
这个问题的答案是使用 udev。 通过读取称为 bmAttributes 的特殊属性,您可以找到 I/O 的实际长度。 使用以下代码阅读它:
....
udev_device_get_sysattr_value(dev, "bmAttributes")
....
关于linux - 如何在 Linux 中检索隐藏设备的 wLength?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026838/