Linuxが持っているUSBデバイスのメモリをどのようにクリアしますか?
複数のUSBデバイスを接続すると、Linuxがそれらを「記憶」し、/dev
の同じ場所に再マウントしているように見えることに気付きました。
たとえば、接続すると/dev/ttyACM0
、/dev/ttyACM1
、/dev/ttyACM2
として表示されるArduinoがいくつかあります。それらをすべて切断してから2番目を再接続すると、接続されている唯一のデバイスであるにもかかわらず、/dev/ttyACM1
ではなく/dev/ttyACM0
として再表示されます。
2番目のデバイスが/dev/ttyACM1
としてマウントされることを記憶しているメカニズムをクリアするにはどうすればよいですか?これをクリアするために私が見つけた唯一の方法は再起動することですが、それは私のシステムにあまりにも破壊的です。 udev
を再起動しようとしましたが、効果がありませんでした。
ArduinoがUSBホストに再接続された後、そのシリアル接続が散発的にハングして切断されるという問題をデバッグしようとしています。新たに再起動した後、Arduinoのシリアル接続は完全に機能するため、私の理論では、古い接続の一部の側面を記憶しているコンピューターのUSBドライバーにバグがあり、これを新しい接続に再利用しようとして失敗します。 。
あなたはusb-serialドライバーモジュールをアンロードしてリロードするかもしれません:それはcdc-acm
またはftdi-sio
のどちらかです。
すべてのArduinoのプラグを抜いたら、次のコマンドを実行します。
Sudo modprobe -r cdc-acm
Sudo modprobe -r ftdi-sio
Arduinoを接続し直すと、カーネルは自動的にそれらをリロードします(Arduinoモデルに適した方)が、ドライバーをアンロードすると、どのデバイスの「メモリ」が削除されます。
それはあなたのシステムに依存します(あなたは私たちに何も言わなかった)。
多くの場合、永続的なデバイス割り当てはudevルールによって処理され、/etc/udev/rules.d
に保存されます。通常、名前にpersistent
が含まれるファイルに保存されます。システム上で見つけたものを見てください。