尝试读取串行端口、设备或资源繁忙

尝试读取串行端口、设备或资源繁忙

我正在尝试从 GPS 模块读取数据。它使用 TTL 通信,我有一个适配器将其转换为 USB,并连接到我的计算机。

我可以使用 cgps 从它获取数据,但我需要与它进行更多基础级别的通信。

当我尝试

gpscat -s 9600 /dev/ttyUSB0

我明白了

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

我已经尝试过、、、,lsof但我无法弄清楚是什么在使用端口,因此我无法停止它。fuserps -ef | grepps aux | grep

答案1

有时仅仅lsof /dev/ttyUSB0是不够的,您需要sudo lsof /dev/ttyUSB0查看哪个进程正在使用文件/端口。

例如,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

相关内容