在我的嵌入式机器上,两个 USB 设备安装在类似的 /dev 文件上:/dev/ttyACMx。设备为POS设备;另一台是打印机。
我不知道哪个设备是 ttyACM0 或 ttyACM1:我的猜测是我无法假设特定的顺序。
那么,一旦检测到 ttyACM0 和 ttyACM1 的存在,我如何知道哪个 USB 设备与 tty* 文件绑定?
我检查过LSSB和USB 设备但我无法连接信息。
谢谢
答案1
作为 root, 的输出udevadm info -q all -a -n /dev/ttyACM0
将输出可用于识别/dev/ttyACM0
设备的所有属性。还可以尝试忽略-a
查看现有 udev 规则可能生成的环境变量的选项,以防这些规则对设备进行某种主动探测。
/dev/ttyACM0
如果和的输出存在差异/dev/ttyACM1
,那么该差异可能可以用来识别哪个是哪个。
请注意,这/dev/ttyACM*
可能表明这些设备最初是 RS-232 串行设备,只是添加了通用 USB 转串行转换器芯片以使它们与 USB 兼容。如果是这样,可用信息量取决于转换器芯片如何配置以将设备呈现给 USB 总线。在最好的情况下,可能有一个属性来标识每个设备的类型,并且可能已经有一个自动生成的别名/dev/serial/by-id/*
最坏的情况是,转换器芯片上可能没有任何唯一的内容(甚至没有序列号),并且您可能必须实现某种 udev 规则来进行主动探测,通过向设备发送一些识别请求并检查结果答案,或者为每种类型的设备指定一个特定的 USB 端口,并通过 USB 端口的 sysfs 路径来识别它们。在这种情况下,请检查/dev/serial/by-path/*
:可能已经有一个您可以使用的自动生成的设备别名。
一旦找到可用于区分设备的属性或探测结果,您就可以设置 udev 规则,为相应/dev/ttyACM*
设备分配特定于类型的别名,例如/dev/POS
POS 设备和/dev/receipt
/或适当的设备对于打印机。这些将是指向实际设备名称的符号链接,但您的应用程序将能够像真实设备一样使用它们。