Intentando leer un puerto serie, dispositivo o recurso ocupado

Intentando leer un puerto serie, dispositivo o recurso ocupado

Estoy intentando leer los datos de un módulo GPS. Utiliza comunicación TTL y tengo un adaptador para convertirlo a USB que está conectado a mi computadora.

Puedo obtener datos usando cgps, pero necesito tener más comunicación de nivel básico con él.

cuando lo intento

gpscat -s 9600 /dev/ttyUSB0

yo obtengo

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

Probé lsof, fuser, ps -ef | grep, ps aux | grepy no puedo entender qué está usando el puerto y, por lo tanto, no puedo detenerlo.

Respuesta1

A veces simplemente lsof /dev/ttyUSB0es insuficiente y es necesario sudo lsof /dev/ttyUSB0ver qué proceso está utilizando el archivo/puerto.

Por ejemplo, simplemente lsof /dev/ttyUSB3no veo nada, pero sudo lsof /dev/ttyUSB3revela que ModemManager está usando el puerto:

ingrese la descripción de la imagen aquí

Respuesta2

¿Su nombre de usuario ya está en el grupo de dailout, si no lo ejecuta?

sudo adduser $USER dialout

Intente ejecutar sus comandos nuevamente, AFAIK, esto debería funcionar.

Respuesta3

Esto puede ser un problema de permisos. Intenta ejecutar:

sudo chmod a+rw /dev/ttyUSB0

Luego conéctese nuevamente.

Respuesta4

La combinación de las respuestas anteriores resolvió mi problema.

Al detener el ModemManager pude liberar el puerto serie y usarlo

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

Alternativamente, el módem LTE específico puede excluirse de la gestión del 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

Para acceder al puerto serie sin sudo tuve que

#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

información relacionada