내가 직면한 문제에 대한 간략한 배경. 저는 USB 브리지 FT260을 사용하여 동기식 UART/I2C 작업을 구현하는 중입니다. 칩은 HID 보고를 사용하여 이러한 기능을 제공합니다. 연결되면 hid 범용 드라이버는 두 개의 인터페이스, 즉 0과 1을 감지합니다. 첫 번째는 I2C용이고 두 번째는 UART용입니다. 현재 나는FT260 드라이버I2C 지원오직모듈로 로드됨(예:ft260 숨기기) 잘 작동합니다. 그런 다음 후자가 숨겨진 일반을 인수했다고 생각합니다.USBHID이에 대한 책임을 지십시오. lsusb -t
반품:
|__ Port 2: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
dmesg
시작하면 다음이 표시됩니다.
hid-generic 0003:0403:6030.0001: hidraw0: USB HID v1.11 Device [FTDI FT260] on usb-xhci-hcd.1.auto-1.2
hid-generic 0003:0403:6030.0002: hidraw1: USB HID v1.11 Device [FTDI FT260] on usb-xhci-hcd.1.auto-1.2
ft260 0003:0403:6030.0001: hidraw0: USB HID v1.11 Device [FTDI FT260] on usb-xhci-hcd.1.auto-1.2/input
ft260 0003:0403:6030.0002: hidraw1: USB HID v1.11 Device [FTDI FT260] on usb-xhci-hcd.1.auto-1.2/input
UART의 경우 hid-generic과 함께 작동하는 애플리케이션을 사용해야 합니다. I2C용 드라이버는 UART를 지원하도록 확장될 수 있지만(아마도 가상 COM 포트로) 그렇게 간단하지는 않으며(적어도 내 생각에는) 사용하고 싶은 작업 코드가 있고 프로젝트의 나머지 부분에서 계속 작업하고 싶습니다. .
다음을 사용하여 인터페이스 UART 바인딩을 해제하려고 하면:
echo -n 0003:0403:6030.0002 > /sys/bus/hid/drivers/ft260/unbind
바인딩이 사라지는 것을 볼 수 있습니다. 그러나 정확한 인터페이스(1인 경우)를 바인딩하려고 하면일반 숨기기
echo -n 0003:0403:6030.0002 > /sys/bus/hid/drivers/hid-generic/bind
나는 얻다:
-bash: echo: write error: No such device
다음 명령을 사용하여 hid-ft260 모듈을 제거하면 hid-generic이 자동으로 로드됩니다(핫 스왑).
modprobe -r hid-ft260
usbhid가 PID 및 VID를 기반으로 한 번에 하나의 하위 드라이버를 잠그는 것처럼 들리지만 다른 것일 수도 있습니다. 이 문제를 우회하는 방법에 대한 통찰력이 있다면 매우 도움이 될 것입니다. 감사해요.
답변1
좋아, 나에게 도움이 되는 답변을 추가하겠습니다. 그것은 밝혀일반 숨기기hid_generic_match
두 번째 bool 매개변수를 허용 하는 콜백 함수(커널 5.4.70)를 제공하세요 ignore_special_driver
. 이 값이 설정되면(ignore_special_driver=1) 일치 함수가 반환되고 true
조사됩니다. 금후,일반 숨기기ft260의 uart 인터페이스에 연결할 수 있습니다.USBHID결국 그것은 그것과 아무 관련이 없습니다.
내 설정에서는 모듈이일반 숨기기그리고ft260 숨기기재부팅 후 시작ft260 숨기기두 인터페이스를 모두 제어합니다. 그래서 위에 게시된 문제를 해결하기 위해 다음을 수행합니다.
echo 1 > /sys/module/hid/parameters/ignore_special_drivers
echo -n "0003:0403:6030.0002" > /sys/bus/hid/drivers/ft260/unbind
핫 플러깅으로 인해 사용 가능한 HID-UART 인터페이스에서 hid-generic이 성공적으로 감지되었습니다.
hid-generic 0003:0403:6030.0002: hidraw1: USB HID v1.11 Device [FTDI FT260] on usb-xhci-hcd.1.auto-1.2/input1
바인딩은 다음과 같이 확인할 수도 있습니다.
root@root:~# ls /sys/bus/hid/drivers/ft260/
0003:0403:6030.0001 bind module new_id uevent unbind
root@root:~# ls /sys/bus/hid/drivers/hid-generic/
0003:0403:6030.0002 bind module new_id uevent unbind
udev
이 작업을 자동화하는 규칙을 만들 수 있습니다.
논평: ignore_special_driver=1
감지하기 전인 경우ft260 숨기기, VID와 PID가 일치하더라도 ft260 드라이버는 두 인터페이스 중 하나에 바인딩되지 않습니다.