/etc/udev/rules.d
Texas Instruments CC1352P-2開発ボードのルールを追加したいです。私のUbuntuサーバーは2つのttyACMデバイスを作成します。
crw-rw-rw- 1 root dialout 166, 1 Sep 28 10:37 /dev/ttyACM1
crw-rw-rw- 1 root dialout 166, 2 Sep 28 07:28 /dev/ttyACM2
ttyACM1
最初のデバイス(この場合)へのシンボリックリンクを作成したいと思います。ただし、使用する場合は、ベンダーusb-devices
ID + 製品 ID セットを使用してボードのセクションを作成します。
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=02 Dev#= 5 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0451 ProdID=bef3 Rev=01.00
S: Manufacturer=Texas Instruments
S: Product=XDS110 (03.00.00.15) Embed with CMSIS-DAP
S: SerialNumber=L430037Y
C: #Ifs= 7 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=01 Driver=cdc_acm
I: If#=0x1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
I: If#=0x3 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=01 Driver=cdc_acm
I: If#=0x4 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
I: If#=0x5 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
I: If#=0x6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
次に、次のIDを使用してルールを作成します/etc/udev/rules.d/50-devboards.rules
。
# Texas Instruments CC1352P-2 development kit
KERNEL=="ttyACM*" ATTRS{idVendor}=="0451", ATTRS{idProduct}=="bef3", MODE="0666", SYMLINK+="tty-CC1352P-2"
ttyACM2
これにより、を指すシンボリックリンクが生成されますttyACM1
。
lrwxrwxrwx 1 root root 7 Sep 28 07:28 /dev/tty-CC1352P-2 -> ttyACM2
質問:デバイスがその下に複数のttyデバイスを作成する場合、ルールのターゲットを特定のttyデバイスとして指定するにはどうすればよいですか/dev
?
答え1
「ttyデバイス」と「USBデバイス」の間には中間層があります。 - 「USB相互作用ドライバはUSBデバイスに完全に接続されていませんが、各インターフェイスに別々のドライバインスタンスがあります(他のドライバである可能性があります)。
(残念ながら、Ubuntuにusbutilsは含まれていません。lsusb.py、この-i
オプションを使用すると、インターフェイスを含む完全なUSB階層が表示されます。 )
USBデバイスには0x00から0x06まで番号付けされた複数のインターフェイスがあり、ttyACM1はインターフェイス0を介して生成され、ttyACM2はインターフェイス3を介して生成されました(しかしこれを使用してudevadm info /dev/ttyACM2
理解できます)。
一致の一部としてインターフェイス番号を使用します(例:)ATTRS{bInterfaceNumber}=="00"
。
ただし、単一のルール内のすべてのATTRS(およびENVS)一致は同じ「親」レベルにロックされますが、2つの異なるレベルの属性を一致させる必要があります。したがって、ENVS を使用するか、次の 2 つの規則が必要になる場合があります。
最初のルールでは、「インターフェース」デバイスを一致させ、ENV属性を適用します。
ACTION!="remove", DEVTYPE=="usb_interface", \ ATTRS{idVendor}=="xx", ATTRS{idProduct}=="xx", \ ATTR{bInterfaceNumber}=="xx", ENV{devboard_link}="tty-CC1352P-2"
次に、「tty」デバイスを一致させ、親デバイスに対応する属性があることを確認します。
ACTION!="remove", SUBSYSTEM=="tty", \ ENVS{devboard_link}=="?*", IMPORT{parent}="devboard_link", TAG+="uaccess", SYMLINK+="$env{devboard_link}"
(テストされていない例です。)