Linux 告诉我串行端口正在使用中,但实际上并未使用

Linux 告诉我串行端口正在使用中,但实际上并未使用

在 CrunchBang Linux(Debian 版本)上,我有一个 COM 端口ttyS0,我正尝试将其与 NFC 设备一起使用。libnfc 响应说它看不到任何 NFC 设备,因此我尝试直接打开 COM 端口。为此,我使用了:

sudo cu -l /dev/ttyS0 -s 9600

但是,此命令返回:

cu: open (/dev/ttyS0): Permission denied
cu: /dev/ttyS0: Line in use

我不知道什么可能正在使用此连接。为了找出答案,我尝试读取所有打开的进程并过滤以下用途ttyS0

ps -ef | grep tty

但对于此命令,没有显示任何正在使用的内容ttyS0。我还尝试抓取所有打开的文件并过滤锁定ttyS0

lsof | grep tty

但使用 则不会返回任何内容ttyS0

怎么可能cu显示该线路正在使用,但pslsof使用该线路却不返回任何内容?

答案1

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

ls -la /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB0

并重试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"

答案2

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

sudo adduser <username> dialout

答案3

看来这是 中的一个错误。我通过使用以下命令cu更改 的所有者组解决了此问题:/dev/ttyUSB0

chown root:root /dev/ttyUSB0

答案4

将您的用户添加到dialout组中。根据系统的不同,可能还需要将您的用户添加到uucp组中。

检查群组成员资格:

getent group dialout

或者检查你的用户:

groups `whoami`

如果有必要,添加您的用户:

usermod -aG dialout `whoami`

按照上面提到的方法进行验证getent

相关内容