特定のデバイスに対して `/dev/ttyACMx` を生成する方法

特定のデバイスに対して `/dev/ttyACMx` を生成する方法

私はCypressの2つのプロトタイプボード、CY8CKIT-043とCY8CKIT-049を使用しています。

最初のものをUSBポートに接続すると、1つが作成され、/dev/ttyACM0デバイスと通信できます。

第二に、状況はより複雑です。ボードにUSBシリアルデバイスがあるようですが、何も取り付けられていません。

2番目のデバイスは温度計で処理されます(dmesglsusbが報告したように)。

各デバイスに関するルールを検索しましたが、udevより混乱しています。

働く方のために、60-openocd.rules

# Cypress KitProg in KitProg mode
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="f139", MODE="660", GROUP="plugdev", TAG+="uaccess

もう1つは で見つけたのですが、よく77-mm-usb-serial-adapters-greylist.rulesわかりませんが、よく理解すると、デバイスは機能しません(?)

ATTRS{idVendor}=="04B4", ATTRS{idProduct}=="0002", ENV{ID_MM_TTY_MANUAL_SCAN_ONLY}="1"

質問

  • 私が何か不可能にするつもりですか?
  • それ以外の場合は、USBバスデバイス用のドライバを/dev/ttyACMx使用してファイルを生成するようにシステムに指示することはできますか?cdc_acmxxxyyy

私が試したこと 読むhttps://www.linuxquestions.org/questions/linux-hardware-18/forcing-a-specific-driver-for-a-device-through-udev-836411/、次のudevルールを作成しようとしています。

ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="0002", RUN+="modprobe cdc_acm", NAME="ttytest"

しかし、成功しませんでした。


追加情報

043(業務装置)用 lsusb:

Bus 001 Device 029: ID 04b4:f139 Cypress Semiconductor Corp. Cypress KitProg
Device Descriptor:
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0         8
  idVendor           0x04b4 Cypress Semiconductor Corp.
  idProduct          0xf139 
  bcdDevice            2.15
  iManufacturer           1 Cypress Semiconductor
  iProduct                2 Cypress KitProg
...

043のdmesg(ビジネスデバイス):

usb 1-2: New USB device found, idVendor=04b4, idProduct=f139, bcdDevice= 2.15
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=128
usb 1-2: Product: Cypress KitProg
usb 1-2: Manufacturer: Cypress Semiconductor
usb 1-2: SerialNumber: 0B05091C02179400
hid-generic 0003:04B4:F139.000B: hiddev0,hidraw3: USB HID v1.11 Device [Cypress Semiconductor Cypress KitProg] on usb-0000:00:14.0-2/input0
cdc_acm 1-2:1.2: ttyACM0: USB ACM device

049 lsusb(動作しない):

Bus 001 Device 011: ID 04b4:0002 Cypress Semiconductor Corp. CY7C63x0x Thermometer
Device Descriptor:
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x04b4 Cypress Semiconductor Corp.
  idProduct          0x0002 CY7C63x0x Thermometer
  bcdDevice            0.00
  iManufacturer           1 Cypress Semiconductor
  iProduct                2 USB-Serial (Single Channel)
...

049のdmes(動作しない):

usb 1-2: New USB device found, idVendor=04b4, idProduct=0002, bcdDevice= 0.00
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-2: Product: USB-Serial (Single Channel)
usb 1-2: Manufacturer: Cypress Semiconductor
cytherm 1-2:1.0: Cypress thermometer device now attached
cytherm 1-2:1.1: Cypress thermometer device now attached
cytherm 1-2:1.2: Cypress thermometer device now attached

ベストアンサー1

何らかの理由でボード049は、独自のドライバを備えcythermたCY7C63x0x温度計に関連付けられたUSB製品IDを提供します。

cythermドライバはベンダー+製品IDと一致するため、インターフェイスクラス、サブクラス、およびプロトコル固有の一致(ドライバとの一致)よりも優先順位が高い一致と見なされますcdc-acm

次の行を追加してドライバをブラックリストに追加できますcytherm。例/etc/modprobe.d/blacklist.conf:

blacklist cytherm

その後、ドライバをアンmodprobe -r cythermインストールします(ロードされている場合)。cytherm

その後、デバイスを取り外して再接続すると、cdc-acmドライバはそのデバイスを要求する必要があります。

この問題が発生した最初の人ではないようです。https://community.infineon.com/t5/USB-low-full-high-speed/USB-to-serial-bridge-recognized-as-Thermometer-04b4-0002-instead-of-as-a-serial/ td-p/350483

udev ルールは、ENV{ID_MM_TTY_MANUAL_SCAN_ONLY}="1"管理者がデバイスをスキャンするように明示的に指示しない限り、ModemManager に、TTY デバイスなどのモバイルデータモデムの結果を調査しないように指示します。これは実際にはTTYのようなモデムではなく、デバイスにとって良いアイデアです。検索しようとするとエラーが発生したり、デバイスが予期せず動作する可能性があるためです。

デバイスの権限を指定するには、次の udev ルールが必要な場合があります。

ACTION=="add", ATTRS{idVendor}=="04B4", ATTRS{idProduct}=="0002", MODE="660", GROUP="plugdev", TAG+="uaccess"

明らかに、Cypressプログラミングツールを使用してボードの製品IDを変更することで、これらの競合を永久に削除することも可能です。複数のLinuxシステムで動作するためにこのボードが必要な場合は、このボードが良い選択かもしれません(詳細については上記のリンクを参照)。

おすすめ記事