Linux USBDEVFS_重置与IOCTL_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

我似乎在USB堆栈的不同抽象之间纠结。。针对USB设备触发的
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)
)是相同的