我有一个基于FTDI芯片的USB设备。有时,它的驱动程序会卡住。
在linux下,没有问题 - 设备自动断开连接,并且默认内核重新连接,只有问题是设备名称已更改 - 可以通过udev规则修复。
在Windows下,当它卡住时,当时执行read()
或write()
的应用程序线程完全挂起。它既不能被TerminateThread
杀死,也不能被KillProcess
杀死。
杀死应用程序的唯一方法 - 是物理断开USB设备。
以编程方式发出设备重新连接的任何方法,这将删除驱动程序的死锁并允许重新打开端口并继续工作?
如果需要,管理权利申请可以有。
答案 0 :(得分:5)
我建议你把想法提高一步。您正试图直接重启USB设备,为什么不尝试集线器?
我有类似的问题,并且正在做:
devcon remove *ROOT_HUB* && devcon rescan
挂起时,将USB设备重新连接到集线器。
注意:这将从设备管理器中删除所有USB设备并重新添加。您可以使用expect或类似内容devcon findall *ROOT_HUB*
,并根据需要删除ROOT_HUB20
或ROOT_HUB30
。