Попытка чтения последовательного порта, устройства или ресурса занята

Попытка чтения последовательного порта, устройства или ресурса занята

Я пытаюсь считать данные с GPS-модуля. Он использует TTL-связь, и у меня есть адаптер для преобразования его в USB, который подключен к моему компьютеру.

Я могу получать данные с него с помощью cgps, но мне нужно иметь с ним более базовый уровень связи.

Когда я пытаюсь

gpscat -s 9600 /dev/ttyUSB0

я получил

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

Я пробовал lsof, fuser, ps -ef | grep, ps aux | grep, но не могу понять, что использует порт, и поэтому не могу это остановить.

решение1

Иногда этого lsof /dev/ttyUSB0недостаточно, и нужно sudo lsof /dev/ttyUSB0посмотреть, какой процесс использует файл/порт.

Например, при использовании just lsof /dev/ttyUSB3я ничего не вижу, но sudo lsof /dev/ttyUSB3выдает, что ModemManager использует порт:

введите описание изображения здесь

решение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

Связанный контент