디:libusb를 사용하여 제어할 수 있도록 usbhid가 새로운 USB 장치를 선언하는 것을 방지하시겠습니까?
libusb-0.1을 사용하는 프로그램에서 RFID 리더(HID 장치로 사용)에 액세스하고 싶습니다. 코드에서 커널 드라이버는 제대로 분리되었지만 usb_detach_kernel_driver_np
(오류 없음) 내 프로그램이 USB 장치에 액세스하려고 할 때마다 usbhid 모듈이 이를 재활용하는 것 같습니다. 다음 오류가 항상 발생합니다 dmesg
.
USB 1-1.3: usbfs: 인터페이스 0은 usbhid에 의해 요청되고 "MyProgram"은 구성 #1을 설정합니다.
다음 udev 규칙을 추가하고 udevd를 다시 시작한 다음 장치를 다시 연결했지만 효과가 없었습니다. 장치를 블랙리스트에 추가하여 usbhid에서 사용하는 것을 방지해야 합니다.
# I anonymized the vendor/product IDs here
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", OPTIONS=="ignore_device"
/sys/bus/usb/drivers/usbhid/
dmesg 출력 외에도 장치가 매번 다시 생성되는 것을 볼 수 있으므로 1-1.3:1.0
블랙리스트가 작동하지 않는 것 같습니다.
제가 시도할 수 있는 다른 것이 있나요? 운영 체제는 Raspbian(Raspberry Pi)이고 커널은 3.2.27입니다.
답변1
나는 문제의 이 부분을 해결했습니다.
OPTIONS=="ignore_device"
커널에서 제거됨(범죄)blacklist usbhid
아무것도 안 했어요, 심지어 키보드도 막지 않았어요options usbhid quirks=0xdead:0xbeef:0x0004
usbhid가 모듈로 컴파일되지 않았기 때문에 /etc/modprobe.d의 구성 파일이 작동하지 않습니다.
usbhid.quirks=0xdead:0xbeef:0x4
그래서 부팅 명령줄(Raspbian의 경우 /boot/cmdline.txt)에 추가했는데 usbhid가 더 이상 장치를 바인딩하지 않습니다.
그러나 원래 문제는 여전히 존재합니다. RFID 리더에 처음 액세스할 때 읽기/시간 초과 오류가 계속 발생합니다.
답변2
나는 같은 문제가 있었고 다음과 같이 udev 규칙 파일을 수정하여 문제를 해결했습니다.
SUBSYSTEM=="input", GROUP="input", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="4242", ATTRS{idProduct}=="e131", MODE:="666", GROUP="users"
이제 libusb
이 기능을 사용하여 RFID 로거를 읽을 수 있습니다.