我有一个有趣的USB隐藏设备,Linux上不支持,所以我一直试图移植它并创建一个合适的驱动程序。 我已经设法了解如何通过在vm和usbmon上使用驱动程序来交换数据。
我设法用libusb控制设备。 (我的节目很好) 以下是将数据发送到USB设备的两条最重要的行。
libusb_control_transfer(dev_handle, 0x21, 0x39, 0x200, 0x00, data + i, 8, 0);
libusb_interrupt_transfer(dev_handle, 0x81, vide, 8, &actual, 300);
之后,我尝试创建一个char驱动程序。
r = usb_control_msg(dev->udev,
usb_sndctrlpipe(dev->udev, 0),
CTRL_REQUEST,
CTRL_REQUEST_TYPE,
CTRL_VALUE,
CTRL_INDEX,
data_to_send + j,
8,
HZ * 2);
r = usb_interrupt_msg(dev->udev,
usb_sndintpipe(dev->udev, 129), // 129 = 0x81
vide,
8,
&k,
300);
usb_interrupt_msg的返回值为负。 我的端点很好:bEndpointAddress 0x81 EP 1 IN
使用libusb,一切正常, 与驾驶员一起,似乎没有发送中断。
我是否错过了函数usb_interrupt_msg? 我一直在阅读很多文档(libusb,来自内核的usb ......),但我找不到答案。