"형제" 장치의 일련 번호를 사용하여 udev 규칙을 만들려면 어떻게 해야 합니까(고유 일련 번호가 없는 USB 장치의 경우)?

"형제" 장치의 일련 번호를 사용하여 udev 규칙을 만들려면 어떻게 해야 합니까(고유 일련 번호가 없는 USB 장치의 경우)?

내 테스트 장비는 다음 부분으로 구성됩니다.

  • 메인 PC에 연결된 USB 허브인 이 허브는 테스트 픽스처에 내장되어 사용되므로 픽스처에서 PC까지 연결하는 USB 케이블은 1개뿐입니다.
  • USB를 통해 허브에 연결된 Arduino UNO
  • USB를 통해 USB 허브에 연결된 측정기(전력계)
  • USB를 통해 USB 허브에 연결된 다른 측정 장치(온도계)
  • 메인 PC에서 테스트 프로그램을 실행하고 Arduino 및 두 개의 계측기와 통신하는 Python 스크립트입니다.

이 모든 것이 첫 번째 고정 장치에서는 작동했지만 이제 테스트 설정(한 대의 PC에 3개의 테스트 고정 장치)을 복제해야 합니다. 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?

udevadmArduino의 경우 올바른 일련 번호가 메시지에 있으므로 이것은 쉽습니다 .파워미터, 일련번호는 항상 동일합니다.그리고온도계, 일련번호 없음(저렴한 공급 업체에게 감사드립니다 !!!).

USB 허브에는 분명히 직렬도 없습니다.

답변1

글쎄, 이것은 질문에 대한 답은 아니지만 해결책을 가져 왔습니다. 그게 다야.

나는 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 직렬을 통해 연결되어 있다는 사실을 알게 될 것입니다.

답변2

udev장치와 일치하는 일련 번호가 있을 뿐만 아니라 사용 가능한 모든 속성을 사용할 수 있습니다.

udevadm info /dev/...따라서 동일한 일련 번호를 가진 두 장치에서 거의 다른 것을 사용할 수 있습니다 udevadm info -a /dev/....

각 장치에 대해 이러한 출력을 공유할 수 있다면 제가 도움을 드릴 수 있을 것입니다. 귀하의 답변에 따르면 udev 규칙에서 사용할 수 있도록 다른 공급업체/모델이 있는 것 같습니다.

관련 정보