我正在尝试从 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