我有测试设备,是由以下组成的:
所有这些都与我的第一个跳汰机很好,但我现在需要复制测试设置(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信息中有正确的序列号,但是对于功率计,序列号总是相同的,对于温度计来说,根本没有序列号(谢谢便宜的供应商!)
发布于 2016-06-29 11:16:55
好吧,这不是问题的答案,而是给我一个解决办法。所以它就在这里。
我对Udev规则做了相当多的改动,没有什么比我的Arduino在/dev/arduino01上持续出现更好的了(将使用/dev/arduino02,/dev/arduino03,.其他夹具)
我的测试脚本是用Python编写的,我刚刚发现有一个很好的库名为比德夫,所以我决定看看这条路线。
几分钟后,我就
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系列。
发布于 2016-07-08 17:49:34
udev不仅有用于匹配设备的序列化,还可以使用任何可用的属性。
因此,您几乎可以使用udevadm info /dev/... & udevadm info -a /dev/...中的任何不同之处,这两种设备都具有相同的序列化。
如果您可以为每个设备共享这些输出,我可能会提供帮助。从您的回答来看,您似乎已经得到了不同的供应商/模型,因此可以在udev规则中使用。
https://unix.stackexchange.com/questions/292570
复制相似问题