在我的嵌入式机器上,两个USB设备被安装在一个类似的/dev文件上: /dev/ttyACMx。设备是POS设备,另一个是打印机。
我不知道哪个设备将是ttyACM0还是ttyACM1:我的猜测是,我无法假设一个特定的订单。
因此,一旦检测到ttyACM0和ttyACM1的存在,我如何才能知道哪个USB设备被绑定到tty*文件?
我查过了lsusb和usb设备,但是我无法连接这些信息。
谢谢
发布于 2021-04-29 08:33:18
作为根用户,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或适合打印机的东西。这些将是指向实际设备名称的符号链接,但是您的应用程序将能够像使用真正的设备一样使用它们。
https://unix.stackexchange.com/questions/647235
复制相似问题