특정 장치에 대해 `/dev/ttyACMx`를 생성하는 방법

특정 장치에 대해 `/dev/ttyACMx`를 생성하는 방법

저는 Cypress의 두 프로토타입 보드인 CY8CKIT-043과 CY8CKIT-049를 사용합니다.

첫 번째 것을 USB 포트에 연결하면 /dev/ttyACM0하나가 생성되고 장치와 통신할 수 있습니다.

두 번째는 상황이 더 복잡합니다. 보드에 USB 직렬 장치가 있는 것 같지만 아무것도 설치되어 있지 않습니다.

두 번째 장치는 온도계로 처리됩니다( dmesglsusb에서 보고한 대로).

각 장치와 관련된 규칙을 검색했지만 udev더 혼란스럽습니다.

일하는 분들을 위해,60-openocd.rules

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

다른 하나는 에서 찾았는데 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 시스템에서 작동하기 위해 이 보드가 필요한 경우 이 보드가 좋은 선택일 수 있습니다(자세한 내용은 위 링크 참조).

관련 정보