직렬 포트, 장치 또는 리소스를 읽으려는 중입니다.

직렬 포트, 장치 또는 리소스를 읽으려는 중입니다.

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어떤 프로세스가 파일/포트를 사용하고 있는지 확인해야 합니다.

예를 들어, lsof /dev/ttyUSB3아무것도 표시되지 않지만 sudo lsof /dev/ttyUSB3ModemManager가 포트를 사용하고 있음을 나타냅니다.

여기에 이미지 설명을 입력하세요

답변2

실행되지 않은 경우 귀하의 사용자 이름이 이미 daiout 그룹에 있습니까?

sudo adduser $USER dialout

명령을 다시 실행해 보세요. AFAIK가 작동합니다.

답변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

관련 정보