udev 规则将串行端口分配/限制为一系列数字

udev 规则将串行端口分配/限制为一系列数字

我试图根据制造商属性来隔离串行端口ATTRS{manufacturer}

我想分配/dev/ttyUSBx给从制造商 A 检测到的那些,其中可以取介于和x之间的值。同样,对于那些检测为来自制造商 B 的产品,我想分配,其中 只能取和之间的值。09/dev/ttyUSByy1019

我碰巧遇到文章,作者说可以使用 来修改名称symlinks。我们可以做类似的事情来满足我的要求吗?

答案1

不是直接回答你的问题,但你可以检查一下

$ ls -l /dev/serial/by-id/

(插入至少一个 USB 串行适配器后)检查这是否能给您解决问题的想法。

您还可以查看/lib/udev/rules.d/60-serial.rules示例并了解如何/dev/serial工作。在我的 Kubuntu 16.04 上,它看起来像这样:

ACTION=="remove", GOTO="serial_end"
SUBSYSTEM!="tty", GOTO="serial_end"

SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci"
SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"

# /dev/serial/by-path/, /dev/serial/by-id/ for USB devices
KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="serial_end"

SUBSYSTEMS=="usb-serial", ENV{.ID_PORT}="$attr{port_number}"

IMPORT{builtin}="path_id"
ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}"
ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-path/$env{ID_PATH}-port$env{.ID_PORT}"

IMPORT{builtin}="usb_id"
ENV{ID_SERIAL}=="", GOTO="serial_end"
SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}"
ENV{ID_USB_INTERFACE_NUM}=="", GOTO="serial_end"
ENV{.ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}"
ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}-port$env{.ID_PORT}"

LABEL="serial_end"

相关内容