编辑:工作

编辑:工作

我有多个 USB 转串口转换器。我特别需要访问其中之一。我使用 udev 规则给它一个特殊的名称。自从上次修改后我已经重新启动了。

SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", NAME="serial", MODE="0666"

该供应商/产品组合在我的所有 USB 设备中都是独一无二的。

$ ls -l /dev/serial
crw-rw-rw-. 1 root root 189, 133 Feb  8 23:57 /dev/serial
$ ls -l /dev/ttyUSB0
crw-rw----. 1 root dialout 188, 0 Feb  8 23:58 /dev/ttyUSB0

我正在使用 PuTTY 来阅读它们,它可以在 上运行/dev/ttyUSB0,但不能在/dev/serial.当我以 root 身份运行 PuTTY 时,该错误仍然出现。

我收到的错误消息

Unable to open connection to :
Unable to configure serial port

如果有必要的话,我正在运行 CentOS 6。

uname -a
Linux xxxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

编辑:工作

下面的 udev 规则最终起作用了:

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="COM1", MODE="0666"

请注意,SUBSYSTEM是 tty,而不是 usb,NAME已更改为SYMLINK+,并且串行已更改为 COM1(正如评论者指出的那样,不干扰 /dev/serial。)

谢谢你们的帮助,伙计们!

答案1

您希望您的规则关注子系统tty,而不是usb子系统。

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="serial"

当您插入 USB 设备时,它会生成多个 udev 事件,因为内核会识别更多有关该设备的信息。由于它是一个 USB 设备,它首先使用子系统usb,我认为这将创建一个原始 USB 设备,而 PuTTY 无法使用该设备。几个步骤后,它将加载设备的特定驱动程序,并且由于这是一个串行设备,它将参与子系统tty,该子系统创建一个 PuTTY 可以使用的设备文件使用。

此规则将创建一个符号链接,指向/dev/ttyUSB*分配给您设备的任何一个。在我自己的串行加密狗上使用 PuTTY 成功测试。

顺便说一句,对于诊断,我有时会运行以下规则,以了解 udev 脚本所看到的内容:

RUN+="/home/me/bin/udev-diag .$kernel .$number .$devpath .$id .$parent .$root .$tempnode"

其中udev-diag本质上是:

env >>/tmp/udev-events
echo "$@" >>/tmp/udev-events

对于更一般的用途,该udevmonitor程序也很方便。

答案2

利用詹德法则,我曾是能够访问我的 USB 串行适配器...但是仅有的如果以 root 身份运行 PuTTY。

修改规则以指定不同的权限允许任何用户访问它。

IE

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="0666", SYMLINK+="serial"

答案3

下面的 udev 规则最终起作用了:

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="COM1", MODE="0666"

请注意,SUBSYSTEM是 tty,而不是 usb,NAME已更改为SYMLINK+,并且串行已更改为 COM1(正如评论者指出的那样,不干扰 /dev/serial。)

答案4

请注意,该设备可通过组拨出进行组写入。

$ ls -l /dev/ttyUSB0
**crw-rw----** 1 root **dialout** 188, 0 Feb  8 23:58 /dev/ttyUSB0

要解决此权限问题,请将您自己添加到 dialout 组:

$ sudo adduser <username> dialout

然后重新启动会话

相关内容