Linux 告诉我一个串行端口正在使用中,但它不是

13 linux serial-port

在 CrunchBang linux(Debian 变体)上,我有一个 COM 端口ttyS0,我正尝试将其与 NFC 设备一起使用。libnfc回应说看不到任何NFC设备,所以我尝试直接打开COM端口。为此,我使用了:

sudo cu -l /dev/ttyS0 -s 9600
Run Code Online (Sandbox Code Playgroud)

但是,此命令返回:

cu: open (/dev/ttyS0): Permission denied
cu: /dev/ttyS0: Line in use
Run Code Online (Sandbox Code Playgroud)

我不知道可能使用此连接的原因是什么。为了找出答案,我尝试阅读所有打开的进程并过滤使用ttyS0

ps -ef | grep tty
Run Code Online (Sandbox Code Playgroud)

但是对于这个命令,没有显示使用ttyS0. 我还尝试抓取所有打开的文件并过滤锁定ttyS0

lsof | grep tty
Run Code Online (Sandbox Code Playgroud)

但这使用ttyS0.

怎么可能在cu说的线路在使用中,但两者pslsof用任何回报这条线?

小智 12

该行可能没有实际用途,但存在权限问题。为我测试的快速而肮脏的方法是执行:

ls -la /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

并重试cu。如果它开始工作,您需要处理相应的udev文件和用户权限/组。对于我的设备,它看起来像这样(作为plugdev组成员):

> cat /etc/udev/rules.d/42-CP210x.rules 
ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SUBSYSTEMS=="usb",
ACTION=="add", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)


小智 5

串行设备权限被授予组成员dialout。为了连接到,/dev/ttyS0我使用以下命令将当前用户添加到组中:

sudo adduser <username> dialout