我有多个 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
然后重新启动会话