저는 Cypress의 두 프로토타입 보드인 CY8CKIT-043과 CY8CKIT-049를 사용합니다.
첫 번째 것을 USB 포트에 연결하면 /dev/ttyACM0
하나가 생성되고 장치와 통신할 수 있습니다.
두 번째는 상황이 더 복잡합니다. 보드에 USB 직렬 장치가 있는 것 같지만 아무것도 설치되어 있지 않습니다.
두 번째 장치는 온도계로 처리됩니다( dmesg
lsusb에서 보고한 대로).
각 장치와 관련된 규칙을 검색했지만 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_acm
xxx
yyy
내가 시도한 것 읽다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 시스템에서 작동하기 위해 이 보드가 필요한 경우 이 보드가 좋은 선택일 수 있습니다(자세한 내용은 위 링크 참조).