Я пытаюсь считать данные с 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
решение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