USBDEVFS_RESET与IOCTL_USB_RESET

dro*_*nus 15 linux usb ioctl

我似乎不同的抽象之间纠结的USB堆栈上..有什么不同betweeen IOCTL_USB_RESETUSBDEVFS_RESET解雇对一个USB设备?这两个调用最终会在接口上触发相同的低级操作,还是有区别?

我注意到USBDEVFS_RESET有时用'相当于重新插入和重新枚举设备'来描述,而我自己发现,触发IOCTL_USB_RESET(由libusb的usb_reset()调用完成)确实会触发重置消息dmesg但没有新的"枚举",这将导致通常我猜多线USB检测和识别消息.

由于IOCTL_USB_RESET解决我的问题(卡住usb设备)是不可行的,甚至不会触发重新计算,有没有机会USBDEVFS_RESET做得更好?

Jér*_*ler 3

我认为你正在谈论IOCTL_USBFS_RESET而不是IOCTL_USB_RESET

IOCTL_USBFS_RESET是特定于libusb. 事实上,libusb不使用usbdevice_fs.h. 相反,它重新定义了一切os/linux_usbfs.h(我认为是出于历史原因)。这两个标头是二进制兼容的,但libusb结构和 ioctl 不使用相同的名称。对于结构,前缀usbdevfs_替换为usbfs_( usbfs_ctrltransfer, usbfs_bulktransfer, ...)。对于 ioctl,前缀USBDEVFS_被替换为IOCTL_USBFS_

因此,确实与(= )IOCTL_USBFS_RESET相同。USBDEVFS_RESET_IO('U', 20)