gpt4 book ai didi

linux - USBDEVFS_RESET 与 IOCTL_USB_RESET

转载 作者:IT王子 更新时间:2023-10-29 00:25:51 32 4
gpt4 key购买 nike

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

我注意到 USBDEVFS_RESET 有时被描述为“相当于重新插入和重新枚举设备”,而我自己发现触发 IOCTL_USB_RESET(正如 libusb 的 usb_reset() 调用)确实触发了 dmesg 中的重置消息,但没有新的“枚举”,我猜这会导致通常的多行 USB 检测和识别消息。

由于 IOCTL_USB_RESET 无法解决我的问题(卡住 USB 设备),甚至不会触发重新枚举,USBDEVFS_RESET 是否有机会做得更好?

最佳答案

我认为您谈论的是 IOCTL_USBFS_RESET 而不是 IOCTL_USB_RESET

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

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

关于linux - USBDEVFS_RESET 与 IOCTL_USB_RESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30437015/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com