Tentando ler uma porta serial, dispositivo ou recurso ocupado

Tentando ler uma porta serial, dispositivo ou recurso ocupado

Estou tentando ler os dados de um módulo GPS. Ele usa comunicação TTL e tenho um adaptador para convertê-lo em USB que está conectado ao meu computador.

Posso obter dados usando cgps, mas preciso ter mais comunicação de nível básico com ele.

Quando eu tento

gpscat -s 9600 /dev/ttyUSB0

eu recebo

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

Eu tentei lsof, fuser, ps -ef | grep, ps aux | grepe não consigo descobrir o que está usando a porta e, portanto, não consigo parar.

Responder1

Às vezes, apenas lsof /dev/ttyUSB0é insuficiente e você precisa sudo lsof /dev/ttyUSB0ver qual processo está usando o arquivo/porta.

Por exemplo, com apenas lsof /dev/ttyUSB3não vejo nada, mas sudo lsof /dev/ttyUSB3revela que o ModemManager está usando a porta:

insira a descrição da imagem aqui

Responder2

Seu nome de usuário já está no grupo dailout, se não, execute

sudo adduser $USER dialout

Tente executar seus comandos novamente, AFAIK, isso deve funcionar.

Responder3

Isso pode ser um problema de permissões. Tente executar:

sudo chmod a+rw /dev/ttyUSB0

Em seguida, conecte novamente.

Responder4

A combinação das respostas acima resolveu meu problema.

Ao parar o ModemManager consegui liberar a porta serial e usá-la

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

Alternativamente, o modem LTE específico pode ser excluído do gerenciamento do 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 acessar a porta serial sem sudo eu tive 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

informação relacionada