我似乎纠结于USB堆栈上的不同抽象。对USB设备执行IOCTL_USB_RESET和USBDEVFS_RESET有什么不同?这两个调用最终是否会在接口上触发相同的低级操作,或者是否存在差异?
我注意到USBDEVFS_RESET有时被描述为“相当于重新插入和重新枚举设备”,而我自己发现触发IOCTL_USB_RESET (通过libusb的usb_reset()调用完成)确实会在dmesg中触发一个重置消息,但没有新的‘枚举’,我猜这会导致常见的多行USB检测和识别消息。
由于IOCTL_USB_RESET不可能解决我的问题(卡住usb设备),甚至不会触发重新枚举,USBDEVFS_RESET有没有可能做得更好?
发布于 2018-03-24 00:29:06
我觉得你说的是IOCTL_USBFS_RESET而不是IOCTL_USB_RESET
IOCTL_USBFS_RESET是libusb特有的。实际上,libusb不使用usbdevice_fs.h中定义的结构或ioctls。相反,它重新定义了os/linux_usbfs.h中的一切(我认为是由于历史原因)。这两个头文件是二进制兼容的,但是libusb对结构和ioctls不使用相同的名称。对于结构,前缀usbdevfs_替换为usbfs_ (usbfs_ctrltransfer,usbfs_bulktransfer,...)。对于ioctls,IOCTL_USBFS_替换了前缀USBDEVFS_。
因此,实际上,IOCTL_USBFS_RESET与USBDEVFS_RESET (= _IO('U', 20))是相同的。
https://stackoverflow.com/questions/30437015
复制相似问题