Linux USBDEVFS_重置与IOCTL_USB_重置
我似乎在USB堆栈的不同抽象之间纠结。。针对USB设备触发的Linux USBDEVFS_重置与IOCTL_USB_重置,linux,usb,ioctl,Linux,Usb,Ioctl,我似乎在USB堆栈的不同抽象之间纠结。。针对USB设备触发的IOCTL_USB_RESET和USBDEVFS_RESET之间有什么区别?这两个调用最终会在接口上触发相同的低级操作吗,还是有区别 我注意到,USBDEVFS_RESET有时被描述为“相当于重新填充和重新使用设备”,而我自己发现,触发IOCTL_USB_RESET(由libusb的USB_RESET()调用完成)确实会触发dmesg中的重置消息,但没有新的“枚举”,这将导致通常的多线USB检测和识别信息,我猜 由于IOCTL\u US
IOCTL_USB_RESET
和USBDEVFS_RESET
之间有什么区别?这两个调用最终会在接口上触发相同的低级操作吗,还是有区别
我注意到,USBDEVFS_RESET
有时被描述为“相当于重新填充和重新使用设备”,而我自己发现,触发IOCTL_USB_RESET
(由libusb的USB_RESET()
调用完成)确实会触发dmesg
中的重置消息,但没有新的“枚举”,这将导致通常的多线USB检测和识别信息,我猜
由于
IOCTL\u USB\u RESET
无法解决我的问题(卡住的USB设备),甚至不会触发重新计算,因此USBDEVFS\u RESET
有没有可能做得更好 我想你说的是IOCTL\u USBFS\u RESET
而不是IOCTL\u USB\u RESET
IOCTL\u USBFS\u RESET
特定于libusb
。实际上,libusb
不使用usbdevice\u fs.h
中定义的结构或ioctl。相反,它重新定义了os/linux_usbfs.h中的所有内容(我认为是出于历史原因)。这两个头是二进制兼容的,但是,libusb
对结构和ioctl使用不同的名称。对于结构,前缀usbdevfs\uuu
替换为usbfs\uu
(usbfs\u ctrltransfer
,usbfs\u bulktransfer
,…)。对于IOCTL,前缀USBDEVFS
替换为IOCTL\u USBFS
因此,实际上,IOCTL\U USBFS\U RESET
与USBDEVFS\U RESET
(=\U IO('U',20)
)是相同的