「兄弟」デバイスのシリアル番号を使用してudevルールを作成するにはどうすればよいですか(固有のシリアル番号を持たないUSBデバイスの場合)。

「兄弟」デバイスのシリアル番号を使用してudevルールを作成するにはどうすればよいですか(固有のシリアル番号を持たないUSBデバイスの場合)。

私のテスト機器は次の部分で構成されています。

  • メインPCに接続されたUSBハブであるこのハブはテストフィクスチャに内蔵されて使用されるため、フィクスチャからPCまで接続するUSB​​ケーブルは1本だけです。
  • USB経由でハブに接続されたArduino UNO
  • USB経由でUSBハブに接続されたメーター(パワーメーター)
  • USB経由でUSBハブに接続された他の測定装置(温度計)
  • メインPCでテストプログラムを実行し、Arduinoと2つの機器と通信するPythonスクリプトです。

これはすべて最初のフィクスチャで機能しましたが、今度はテスト設定(1台の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シリアルを介して接続されていることがわかります。

おすすめ記事