Udev

PuTTY 可以作為 /dev/ttyUSB0 訪問串口,但不能作為命名的 udev 設備訪問

  • January 24, 2017

我有多個 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"

請注意,SUBSYSTEMtty,而不是 usb,NAME已更改為SYMLINK+,並且串列已更改為 COM1(正如評論者指出的那樣,不干擾 /dev/serial。)

謝謝你們的幫助,伙計們!

您希望您的規則關注tty子系統,而不是子系統usb

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

當您插入 USB 設備時,它會生成幾個 udev 事件,因為核心會辨識更多關於它的內容。由於它是一個 USB 設備,它首先使用usb子系統,我認為它會創建一個原始 USB 設備,而 PuTTY 不能使用它。幾個步驟後,它將載入設備的特定驅動程序,並且由於這是一個串列設備,它將使用子系統,從而創建一個 PuTTY可以使用tty的設備文件。

此規則將創建一個符號連結,指向/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程序也很方便。

引用自:https://unix.stackexchange.com/questions/64266