如何强制 USB 设备在崩溃并重置后保留相同的设备文件?

如何强制 USB 设备在崩溃并重置后保留相同的设备文件?

我有 3 个 USB 网络摄像头和 3 个 Arduino 插入同一台计算机。启动时,它们被标记为/dev/videoN(N 从 0 到 2) 和/dev/ttyACMN(N 从 0 到 2)。到目前为止一切顺利。

问题是当其中一个设备出现问题时(例如,Arduino、其 IDE 或视频捕获程序崩溃)。然后为设备分配一个新的设备文件(如/dev/video3/dev/ttyACM3)。我想保留相同的设备文件。

插拔设备无济于事;关闭所有应该与其交互的程序也无济于事。如果问题再次出现,则会创建另一个编号更高的设备文件。

就好像旧设备文件的句柄在某处浮动,并阻止重复使用相同的设备文件。但是,原始设备文件本身(例如/dev/ttyACM0)不再存在,或者至少不会显示在目录列表中。

我发现解决这个问题的唯一方法是重启。除了重启之外,有没有办法清除对原始设备文件的任何残留引用,以便可以重新使用?或者,强制彻底清除所有 USB 设备并从头开始重新编号?

答案1

我搞明白了。基本上,当设备名称未被重用时,这意味着某些进程仍在使用旧设备名称。我以为我关闭了所有内容,但即使我关闭了所有可见窗口,仍有一些进程在运行。

以下是查找使用设备名称的进程的方法:

lsof | grep /dev/ttyACM0

然后,一旦我终止该进程并关闭设备电源,设备名称就会根据需要重新使用。

答案2

udev通过编写规则来为这些设备添加符号链接,您可以避免每次都必须终止进程的麻烦 。

因此,每当设备消失时,符号链接也会随之消失。然后,如果您重新插入设备,它会创建一个带有递增数字的新节点,例如:/dev/ttyACM1。但是,链接会在同一路径中创建。

如何区分相同的 USB 转串口适配器?

相关内容