首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用“兄弟”设备的序列号(对于没有唯一串行的USB设备)来制定udev规则?

如何使用“兄弟”设备的序列号(对于没有唯一串行的USB设备)来制定udev规则?
EN

Unix & Linux用户
提问于 2016-06-28 10:51:23
回答 2查看 998关注 0票数 4

我有测试设备,是由以下组成的:

  • USB集线器连接主PC,集线器被嵌入测试夹具中,因此我们只有一个USB电缆从跳汰机运行到PC机。
  • 一个由USB连接到集线器的Arduino UNO
  • 一种通过USB连接到USB集线器的测量仪器(功率计)
  • 另一个通过USB连接到USB集线器的测量装置(温度计)。
  • 从主PC运行测试过程并与Arduino和两种仪器通信的Python脚本。

所有这些都与我的第一个跳汰机很好,但我现在需要复制测试设置(3个测试夹具在一台PC)。我想为设备分配udev持久规则,所以测试人员以后只需要选择1、2或3,这取决于他们使用哪种跳汰机,这样他们就不需要篡改端口号了。

有没有一种方法可以做一条基本的规则:assign symlink /dev/powermeter01 to the powermeter that is on the same USB hub as the Arduino with the serial xxxxxxx

对于Arduino来说,这很容易,因为udevadm信息中有正确的序列号,但是对于功率计,序列号总是相同的,对于温度计来说,根本没有序列号(谢谢便宜的供应商!)

-- USB集线器显然也没有串行的.

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2016-06-29 11:16:55

好吧,这不是问题的答案,而是给我一个解决办法。所以它就在这里。

我对Udev规则做了相当多的改动,没有什么比我的Arduino在/dev/arduino01上持续出现更好的了(将使用/dev/arduino02/dev/arduino03,.其他夹具)

我的测试脚本是用Python编写的,我刚刚发现有一个很好的库名为比德夫,所以我决定看看这条路线。

几分钟后,我就

代码语言:javascript
复制
from pyudev import *
context = Context()
Arduino = Device.from_device_file(context, '/dev/arduino01') 
Hub = Arduino.find_parent("usb","usb_device").find_parent("usb") #first find_parent brings me up to the USB device Arduino, another find_parent brings me to the Hub

Fixture = Enumerator(context)
for dev in Fixture.match_parent(Hub).match_subsystem('tty'):
    if (dev.get('ID_VENDOR_ID')=="10c4" and dev.get('ID_MODEL_ID')=="ea60"): #I got those ID through udevadm.
        powermeter=dev
    if (dev.get('ID_VENDOR_ID')=="067b" and dev.get('ID_MODEL_ID')=="2303"): #I got those ID through udevadm.
        temprecorder=dev

print('Arduino in on ' + str(Arduino.device_node)) #prints : Arduino is on /dev/ttyACM0
print('Powermeter in on ' + str(powermeter.device_node)) #prints : Powermeter is on /dev/ttyUSB1
print('Thermometer in on ' + str(temprecorder.device_node)) #prints : Thermometer is on /dev/ttyUSB0

这给了我测试夹具的3个设备的USB端口,现在我可以将它提供给我的测试例程脚本。

我们之间更精明的将看到我的温度计是通过一个pl2303 USB系列和我的功率计通过一个CP2102 USB系列。

票数 3
EN

Unix & Linux用户

发布于 2016-07-08 17:49:34

udev不仅有用于匹配设备的序列化,还可以使用任何可用的属性。

因此,您几乎可以使用udevadm info /dev/... & udevadm info -a /dev/...中的任何不同之处,这两种设备都具有相同的序列化。

如果您可以为每个设备共享这些输出,我可能会提供帮助。从您的回答来看,您似乎已经得到了不同的供应商/模型,因此可以在udev规则中使用。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/292570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档