CH347T 在linux 下设备重命名的问题

想请问一下有没有其他的方式给CH347T的端口号绑定一个特定的名称?

一般我们通过 etc/udev下定义一个*.rules 来描述操作系统内核看到的设备名称。这个设备名称的获取我是通过

udevadm -a -p /sys/class/tty/ttyCH343USB* 来获取的。

但是碰到了一个问题,就是注册信息配置软件只可以修改  idVender 等信息,也就是同一个芯片的不同端口无法绑定成不同的 ttyCH343USB设备名,这么做的目的是为了让每一个串口插入计算机后都保持名称的不变,方便测试人员使用和定位。

我尝试使用 iad_bFirstInterface 属性配合 ID使用,比如定义如下的规则

ATTRS{iad_bFirstInterface}=="00",ATTRS{serial}=="BC48D5ABCD",SYMLINK+="myTTY1"

ATTRS{iad_bFirstInterface}=="02",ATTRS{serial}=="BC48D5ABCD",SYMLINK+="myTTY2"

上述这种情况下,操作系统使用udevadm -a -p 给出的信息ATTRS{iad_bFirstInterface}=="00" 无法被有效匹配到。

通过比较udevadm -a -p 能给出的信息,我发现同一个CH347T的信息中,生成的两个端口有如下信息不一样,

端口1 iad_bFirstInterface =="00", 端口2 iad_bFirstInterface =="02"

端口1 bInterfaceNumber =="00", 端口2 bInterfaceNumber =="02"

端口1 KERNELS == ?-?.3:1.0           端口2:KERNELS == ?-?.3:1.2

其余都相同。

而不同的CH347T的可修改配置信息可以不同,因此可以区分。

但是区分同一个CH347T的端口只能使用上面三个信息,而iad_bFirstInterface 和bInterfaceNumber  信息使用ATTRS属性枚举的时候都无法和 芯片ID等信息一同有效匹配,独立匹配也不成功。

KERNELS 信息会随着CH347T接入 主板USB设备的端口号的不同而发生变化。所以无法通过该信息绑定设备端口号。所以想问一下如何在同一台计算机中有多个CH347T设备时,分别赋予不同CH347T的COM1 COM2 不同的软连接(*.rule)。


在测试中我发现KERNELS 信息匹配的最后一位在CH347T的COM1中始终为0  COM2始终为2 。请问这个数值和你们的设计初衷是否吻合?可否通过KERNELS 信息的最后一位数是否位0/2来判断串口的端口号?



您好,因为udev规则中匹配设备和单个父设备的属性,不能混合匹配来自多个父设备的属性,所以需要将多级父设备分开处理。

         若需要进行多个CH347的串口号绑定,可以结合我司USB属性配置工具:https://www.wch.cn/downloads/CH34xSerCfg_ZIP.html 修改相关描述符辅助实现,此处使用产品描述符完成您所描述功能。

    a. 若是单个CH347,则在模式0下使用VID、PID以及bInterfaceNumber来进行判断,示例如下:

KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55da", MODE="0666", GOTO="WCH-CH347"
SUBSYSTEMS=="usb", GOTO="CH347-END"

LABEL="WCH-CH347"
ATTRS{bInterfaceNumber}=="00", SYMLINK+="ttyCOM0"
ATTRS{bInterfaceNumber}=="02", SYMLINK+="ttyCOM1"
LABEL="CH347-END"

   多个CH347,举例2个CH347,示例如下

# CH347 Mode 0
KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55da", ATTRS{product}=="CH347UART0001", MODE="0666", GOTO="WCH-CH347-A1"
SUBSYSTEMS=="usb", GOTO="A1-END"

LABEL="WCH-CH347-A1"
ATTRS{bInterfaceNumber}=="00", SYMLINK+="ttyCOM0"
ATTRS{bInterfaceNumber}=="02", SYMLINK+="ttyCOM1"
LABEL="A1-END"

KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55da", ATTRS{product}=="CH347UART0002", MODE="0666", GOTO="WCH-CH347-A2"
SUBSYSTEMS=="usb", GOTO="A2-END"

LABEL="WCH-CH347-A2"
ATTRS{bInterfaceNumber}=="00", SYMLINK+="ttyCOM2"
ATTRS{bInterfaceNumber}=="02", SYMLINK+="ttyCOM3"
LABEL="A2-END"

   b. 在不同模式(CH347-模式1、3)下单个或者多个CH347串口spacer.gif号的固定方法,示例如下:

# CH347 Mode 1
KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55db", ATTRS{product}=="CH347UART0001", MODE="0666", SYMLINK+="ttyCOM0"
KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55db", ATTRS{product}=="CH347UART0002", MODE="0666", SYMLINK+="ttyCOM1"

# CH347 Mode 3
KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55dd", ATTRS{product}=="CH347UART0001", MODE="0666", SYMLINK+="ttyCOM0"
KERNEL=="ttyCH343USB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55dd", ATTRS{product}=="CH347UART0002", MODE="0666", SYMLINK+="ttyCOM1"

您可综合以上描述,集成一个rules文件使用即可。

    



只有登录才能回复,可以选择微信账号登录