我似乎在USB堆栈上的不同抽象之间纠缠在一起.. IOCTL_USB_RESET
和USBDEVFS_RESET
对USB设备的区别是什么?这两个调用最终会在接口上触发相同的低级操作,还是有区别?
我注意到USBDEVFS_RESET
有时用'相当于重新插入并重新枚举设备'来描述,而我自己发现,IOCTL_USB_RESET
触发(由libusb的usb_reset()
调用完成)触发dmesg
中的重置消息,但没有新的'枚举',这将导致我猜想通常的多行USB检测和识别消息。
由于IOCTL_USB_RESET
无法解决我的问题(卡住usb设备),甚至不会触发重新计算,有没有机会USBDEVFS_RESET
会做得更好?
答案 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_ctrltransfer
,usbfs_bulktransfer
,...)。对于ioctl,前缀USBDEVFS_
将替换为IOCTL_USBFS_
。
所以,确实IOCTL_USBFS_RESET
与USBDEVFS_RESET
(= _IO('U', 20)
)相同。