usbhid가 USB 장치를 요청하지 못하도록 방지

usbhid가 USB 장치를 요청하지 못하도록 방지

디: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:0x0004usbhid가 모듈로 컴파일되지 않았기 때문에 /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 로거를 읽을 수 있습니다.

관련 정보