想请问一下有没有其他的方式给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来判断串口的端口号?