PuTTY 可以作为 /dev/ttyUSB0 访问串口,但不能作为命名的 udev 设备访问

Nic*_*ell 5 udev putty serial-port

我有多个 USB 转串口转换器。我需要特别访问其中之一。我正在使用 udev 规则为其指定一个特殊名称。自从我上次修改它以来,我已经重新启动。

SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", NAME="serial", MODE="0666"
Run Code Online (Sandbox Code Playgroud)

该供应商/产品组合在我所有的 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
Run Code Online (Sandbox Code Playgroud)

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

我收到的错误信息

Unable to open connection to :
Unable to configure serial port
Run Code Online (Sandbox Code Playgroud)

万一重要,我正在运行 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
Run Code Online (Sandbox Code Playgroud)

编辑:工作

以下 udev 规则最终奏效:

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="COM1", MODE="0666"
Run Code Online (Sandbox Code Playgroud)

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

感谢您的帮助,伙计们!

Jan*_*der 6

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

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="serial"
Run Code Online (Sandbox Code Playgroud)

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

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

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

RUN+="/home/me/bin/udev-diag .$kernel .$number .$devpath .$id .$parent .$root .$tempnode"
Run Code Online (Sandbox Code Playgroud)

其中udev-diag基本上是:

env >>/tmp/udev-events
echo "$@" >>/tmp/udev-events
Run Code Online (Sandbox Code Playgroud)

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