我想将某些 USB 端口专用于某些设备。我怎样才能做到这一点?
例如:我希望 ttyUSB0 是我的鼠标,而 ttyUSB1 是我的键盘(总是)。我想确定 Linux 的启动永远不会交换它们。
实际上,问题是我有 XBee 通常去 USB0 和第二个 FTDI 去 USB1,出于安全原因,我总是希望它们在我正在运行的代码中具有相同的地址。
亲切的问候
内核分配的名称始终按照检测到设备的顺序分配,您无法更改它们。(无论如何,此功能已被删除,因为“持久名称”规则引起的各种竞争条件。)
但是您可以告诉udev使用您选择的任何名称创建符号链接。事实上,在现代系统上,您应该已经在/dev/serial
以设备路径及其唯一 ID 命名的符号链接下;例如:
/dev/serial/by-path/pci-0000:00:1a.0-usb-0:1.2:1.0
? ttyUSB0
/dev/serial/by-id/usb-Motorola_Inc._Motorola_Phone__C350_-if00
? ttyACM0
/dev/disk/by-id/ata-ST9640320AS_5WX1ZH91-part1
? sda1
/dev/disk/by-partlabel/Arch
? sda3
/dev/input/by-id/usb-PIXART_USB_OPTICAL_MOUSE-mouse
? mouse1
等等。只需运行tree /dev
或ls -lR /dev
找到您的设备。
您也可以运行udevadm info /dev/ttyUSB0
,该设备的所有符号链接都将列为 S: ...
行。
如果这还不够,您可以编写自己的 udev 规则。首先运行udevadm info /dev/ttyUSB0
并选择任何识别属性(例如ID_PATH
USB 端口)。始终包含子系统也是一个好主意。
然后打开(或创建)一个文件/etc/udev/rules.d/
(命名,例如,serial-symlinks.rules
),并将 udev 规则放在那里。
例如,如果输出为ttyUSB0
:
$ udevadm info /dev/ttyUSB0
. . .
E: ID_PATH=pci-0000:00:1d.0-usb-0:1.2:1.0
. . .
E: SUBSYSTEM=tty
. . .
Run Code Online (Sandbox Code Playgroud)
...你可以写这个规则:
SUBSYSTEM=="tty", ENV{ID_PATH}=="pci-0000:00:1d.0-usb-0:1.2:1.0", SYMLINK+="tty-xbee"
Run Code Online (Sandbox Code Playgroud)
...并且 udev 将始终符号链接/dev/tty-xbee
到您连接到 USB 端口 #2 的任何 tty 设备。
(注意:不要对符号链接使用与内核用于设备节点相同的名称。使用SYMLINK+="ttyUSB0"
会导致不好的事情发生。)
归档时间: |
|
查看次数: |
12951 次 |
最近记录: |