linux - 如何在 Linux 中检索隐藏设备的 wLength?

标签 linux

我想检索 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/

相关文章:

linux - 构建一个树外 Linux 内核模块,它与导出的符号共享目标文件

c++ - -fshort-wchar 和 std::wstring - 段错误

linux - 在新终端中找不到自定义命令

linux - 在 C 中关闭监听的 TCP 套接字

具有特权的JVM中的Java文件setWritable

linux - 跨 CPU 内核的 rdtsc 精度

linux - 测试目录是否存在

linux - MPlayer — 改变视频文件的亮度/对比度并保存输出

linux - 使用 start-stop-daemon 时,autossh pid 不等于 pidfile 中的 pid

php - 实时识别爬虫 - PHP - 跟踪内存中的访问文件