嘗試讀取序列埠、裝置或資源正忙

嘗試讀取序列埠、裝置或資源正忙

我正在嘗試從 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

您的使用者名稱是否已在 daiout 群組中(如果未執行)

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

相關內容