使用udev管理多USB转多串口的串口固定问题的解决方案

最近使用USB转4串口, 根据项目需求, 需要多个USB转串口的方案。 但是中途遇到问题, 发现串口每次插拔的顺序串口序号都会变动, 为解决该问题, 在LINUX下需要用到udev进行管理:

udevadm info -a -p /sys/class/tty/ttyUSB3

查看信息如下:

可以看到, 如果使用udev进行管理时, 由于UART串口序号和USB的vendor id, product id 不在同一个父设备中, 在做rules时, 不能直接将多个不同的父设备信息联用索引。 这里需要用到ENV来进行间接索引, 具体方法如下:

在/etc/udev/rules.d目录下创建usb_4uart_test.rules文件, 内容:

ATTRS{idProduct}=="55d2",ATTRS{1a86},ATTRS{idCustom}="000",ENV{para_var}="000"

ATTRS{idProduct}=="55d2",ATTRS{1a86},ATTRS{idCustom}="001",ENV{para_var}="001"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="00",ENV{para_var}=="000",MODE="0777",SYMLINK+="testUSB0"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="01",ENV{para_var}=="000",MODE="0777",SYMLINK+="testUSB1"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="02",ENV{para_var}=="000",MODE="0777",SYMLINK+="testUSB2"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="03",ENV{para_var}=="000",MODE="0777",SYMLINK+="testUSB3"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="00",ENV{para_var}=="001",MODE="0777",SYMLINK+="testUSB4"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="01",ENV{para_var}=="001",MODE="0777",SYMLINK+="testUSB5"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="02",ENV{para_var}=="001",MODE="0777",SYMLINK+="testUSB6"

SUBSYSTEMS==“usb”,DRIVERS=="cdc_acm", ATTRS{bInterfaceNumber}=="03",ENV{para_var}=="001",MODE="0777",SYMLINK+="testUSB7"

注意: 

1) ATTRS{idCustom}="000"是客制化的参数, 由于芯片厂商没有芯片的唯一号, 我们需要自己根据厂商提供的工具增加相应参数, FTDI是提供相关工具的。这里最关键是使用ENV{para_var}做间接处理, 将不同的父设备信息联用。 

2) 如果使用FTDI芯片,可到FTDI下载芯片编程软件, 实现ATTRS{idCustom}="000"的需求(实际ARRTS不叫idCustom, 这里只是举例)

.rules修改(或新增)保存后, 使用

udevadm control --reload

udevadm trigger

启用配置, 使用

ll /dev/testUSB*

查看效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值