USBDEVFS_RESET与IOCTL_USB_RESET

时间:2015-05-25 11:11:15

标签: linux usb ioctl

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

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

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

1 个答案:

答案 0 :(得分:0)

我想你谈的是IOCTL_USBFS_RESET而不是IOCTL_USB_RESET

IOCTL_USBFS_RESET特定于libusb。实际上,libusb不使用usbdevice_fs.h中定义的结构或ioctl。相反,它重新定义os/linux_usbfs.h中的所有内容(我认为是出于历史原因)。这两个标头是二进制兼容的,但libusb不对结构和ioctl使用相同的名称。对于结构,前缀usbdevfs_将替换为usbfs_usbfs_ctrltransferusbfs_bulktransfer,...)。对于ioctl,前缀USBDEVFS_将替换为IOCTL_USBFS_

所以,确实IOCTL_USBFS_RESETUSBDEVFS_RESET(= _IO('U', 20))相同。