Der Versuch, einen seriellen Port, ein Gerät oder eine Ressource zu lesen, ist belegt

Der Versuch, einen seriellen Port, ein Gerät oder eine Ressource zu lesen, ist belegt

Ich versuche, die Daten von einem GPS-Modul zu lesen. Es verwendet TTL-Kommunikation und ich habe einen Adapter, um sie auf USB umzuwandeln, der an meinen Computer angeschlossen ist.

Ich kann mithilfe von CGPs Daten davon abrufen, muss dazu aber auf einer grundlegenderen Ebene mit ihm kommunizieren.

Wenn ich es versuche

gpscat -s 9600 /dev/ttyUSB0

Ich bekomme

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

Ich habe Folgendes ausprobiert lsof: , fuser, ps -ef | grep, ps aux | grep, und kann nicht herausfinden, was den Port verwendet, und kann es daher nicht stoppen.

Antwort1

Manchmal lsof /dev/ttyUSB0reicht das einfach nicht aus und Sie müssen sudo lsof /dev/ttyUSB0sehen, welcher Prozess die Datei/den Port verwendet.

Beispielsweise wird bei „Nur“ lsof /dev/ttyUSB3nichts angezeigt, aber sudo lsof /dev/ttyUSB3es wird angezeigt, dass ModemManager den Port verwendet:

Bildbeschreibung hier eingeben

Antwort2

Ist Ihr Benutzername bereits in der Dailout-Gruppe, wenn nicht ausführen

sudo adduser $USER dialout

Versuchen Sie, Ihre Befehle erneut auszuführen. Soweit ich weiß, sollte das funktionieren.

Antwort3

Dies kann ein Berechtigungsproblem sein. Versuchen Sie Folgendes auszuführen:

sudo chmod a+rw /dev/ttyUSB0

Stellen Sie anschließend die Verbindung erneut her.

Antwort4

Die Kombination der obigen Antworten hat mein Problem gelöst.

Durch das Stoppen des ModemManagers konnte ich den seriellen Port freigeben und verwenden

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

Alternativ kann das jeweilige LTE-Modem von der Verwaltung des ModemManagers ausgeschlossen werden:
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

Um auf den seriellen Port ohne sudo zuzugreifen, musste ich

#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

verwandte Informationen