Evitar que o usbhid indique o dispositivo USB

6

Relacionado diretamente: Impedir o uso do dispositivo usb novidade pelo usbhid para que eu possa controlá-lo com a libusb?

Eu quero acessar um leitor de RFID (funciona como dispositivo HID) de um programa que usa libusb-0.1. No código, o driver do kernel é desanexado corretamente com usb_detach_kernel_driver_np (sem erros), mas parece que sempre que meu programa tenta acessar o dispositivo USB, o módulo usbhid o recupera. O seguinte erro sempre aparece em dmesg :

usb 1-1.3: usbfs: interface 0 claimed by usbhid while 'MyProgram' sets config #1

Eu adicionei a seguinte regra do udev, reiniciei o udevd e reinstalei o dispositivo, mas sem efeito. É suposto que a lista negra do dispositivo seja usada pelo usbhid.

# I anonymized the vendor/product IDs here
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", OPTIONS=="ignore_device"

Além da saída do dmesg, eu posso ver em /sys/bus/usb/drivers/usbhid/ que o dispositivo 1-1.3:1.0 é recriado toda vez, então a lista negra parece não funcionar.

Mais alguma coisa que eu poderia tentar? O sistema operacional é o Raspbian (em um Raspberry Pi) com o kernel 3.2.27.

    
por AndiDog 12.11.2012 / 13:35

2 respostas

3

Eu resolvi essa parte do problema:

  • OPTIONS=="ignore_device" foi removido do kernel ( confirmar )
  • blacklist usbhid não fez nada, nem bloqueou meu teclado
  • Um arquivo de configuração em /etc/modprobe.d com options usbhid quirks=0xdead:0xbeef:0x0004 não funcionou porque o usbhid não foi compilado como módulo

Então, eu adicionei usbhid.quirks=0xdead:0xbeef:0x4 à linha de comando de inicialização (no Raspbian, que está no /boot/cmdline.txt) e o usbhid não liga mais o dispositivo.

Meu problema original, no entanto, ainda permanece. Eu sempre recebo um erro de leitura / timeout ao acessar o leitor de RFID pela primeira vez.

    
por 13.11.2012 / 13:22
1

Eu tive o mesmo problema e resolvi modificar o arquivo de regras do udev assim:

SUBSYSTEM=="input", GROUP="input", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="4242", ATTRS{idProduct}=="e131", MODE:="666", GROUP="users"

E agora posso ler o registrador de RFID usando libusb funções.

    
por 05.12.2012 / 15:15