如何清除 Linux 对 USB 设备的所有内存?
当我插入多个 USB 设备时,我注意到 Linux 似乎“记住”了它们并将它们重新安装到/dev
.
例如,我有一些 Arduino,连接后显示为/dev/ttyACM0
、/dev/ttyACM1
和/dev/ttyACM2
。如果我将它们全部断开,然后重新连接第二个,它会重新显示为/dev/ttyACM1
而不是/dev/ttyACM0
,即使它现在是唯一连接的设备。
如何清除记住第二个设备安装为的任何机制/dev/ttyACM1
?我发现清除此问题的唯一方法是重新启动,但这对我的系统造成太大破坏。我尝试过重新启动udev
,但没有效果。
我正在尝试调试一个问题,即在 Arduino 重新连接到 USB 主机后,其串行连接偶尔会挂起并断开。重新启动后,Arduino 的串行连接工作正常,所以我的理论是我的计算机的 USB 驱动程序中存在一些错误,它会记住旧连接的某些方面,并且它试图将其重新用于新连接,导致其失败。
答案1
您可以卸载并重新加载 USB 串行驱动程序模块:它是cdc-acm
或ftdi-sio
。
拔掉所有 Arduino 的插头后,运行:
sudo modprobe -r cdc-acm
sudo modprobe -r ftdi-sio
当您重新插入 Arduino 时,内核会自动重新加载它们(以适合您的 Arduino 型号的为准),但是卸载驱动程序应该删除其关于哪个设备是哪个的“记忆”。
答案2
这取决于您的系统(您对此一无所知)。
通常,持久设备分配由 udev 规则处理,并存储在 中,通常存储在名称中/etc/udev/rules.d
包含的文件中。persistent
看看你在系统上发现了什么。