シリアルポート、デバイス、またはリソースを読み取ろうとしていますが、ビジーです

シリアルポート、デバイス、またはリソースを読み取ろうとしていますが、ビジーです

GPS モジュールからデータを読み取ろうとしています。TTL 通信を使用し、それを USB に変換するアダプタを持っていて、それをコンピューターに接続しています。

CGPS を使用してデータを取得することはできますが、より基本レベルの通信が必要です。

私が試してみると

gpscat -s 9600 /dev/ttyUSB0

私は

OSError: [Errno 16] Device or resource busy: '/dev/ttyUSB0'

lsof、、、、を試しましたがfuser、何がポートを使用しているのps -ef | grepps aux | grepがわからず、停止できません。

答え1

それだけでは不十分な場合lsof /dev/ttyUSB0があり、sudo lsof /dev/ttyUSB0どのプロセスがファイル/ポートを使用しているかを確認する必要があります。

たとえば、次のようにするとlsof /dev/ttyUSB3何も表示されませんが、sudo lsof /dev/ttyUSB3ModemManager がポートを使用していることがわかります。

ここに画像の説明を入力してください

答え2

あなたのユーザー名はすでにdailoutグループに含まれていますか?含まれていない場合は実行してください

sudo adduser $USER dialout

コマンドをもう一度実行してみてください。私の知る限り、これで動作するはずです。

答え3

これは権限の問題である可能性があります。以下を実行してみてください:

sudo chmod a+rw /dev/ttyUSB0

その後再度接続します。

答え4

上記の回答を組み合わせることで問題は解決しました。

ModemManagerを停止することでシリアルポートを解放して使用できるようになりました

sudo lsof /dev/ttyUSB0
sudo systemctl stop ModemManager.service 
sudo minicom -s

あるいは、特定の LTE モデムを ModemManager の管理から除外することもできます。
https://linux-tips.com/t/prevent-modem-manager-to-capture-usb-serial-devices/284
https://www.freedesktop.org/software/ModemManager/doc/latest/ModemManager/ref-overview-modem-filter.html

sudoなしでシリアルポートにアクセスするには、

#either add my user to dialout group
sudo adduser $USER dialout

#or make the serial port readable and writable to everybody
sudo chmod a+rw /dev/ttyUSB0

関連情報