Eu tenho um lançador de foguetes USB com o qual gostaria de experimentar libusb
. No entanto, o libusb não pode reivindicar a interface; presumivelmente porque a saída das usb-devices
listas 'usbhid' como o driver do dispositivo.
Ao ler na internet, cheguei à conclusão de que preciso desconectar esse driver do dispositivo para poder usá-lo com o libusb. No entanto, não encontrei uma única maneira definitiva de fazer isso, apenas várias idéias e relatórios de erros diferentes.
Portanto, existe uma maneira de desanexar o driver usbhid de um dispositivo que seja relevante para o kernel e as ferramentas fornecidas com o Ubuntu 11.04?
EDITAR:
Eu tentei criar o arquivo
/etc/udev/rules.d/10-usbhid.rules
e escrevendo o seguinte:
ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Salvando e depois reiniciando. O arquivo ainda está lá, mas não parece estar funcionando.
EDITAR:
Ok, eu tentei isso:
sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
Depois disso, navegando para /sys/bus/hid/devices/0003.0A81.0701.0006 e ls, obtém-se:
drwxr-xr-x 2 root root 0 2011-05-29 15:46 power
lrwxrwxrwx 1 root root 0 2011-05-29 13:19 subsystem -> ../../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 2011-05-29 13:19 uevent
Ele não lista mais um link simbólico de "driver" como fazia antes, então eu presumo que ele não tenha sido vinculado. No entanto, todas as evidências parecem sugerir que o driver ainda está usbhid. Por exemplo, dispositivos USB produz:
T: Bus=02 Lev=03 Prnt=07 Port=00 Cnt=01 Dev#= 9 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0a81 ProdID=0701 Rev=00.01
S: Manufacturer=Dream Link
S: Product=USB Missile Launcher v1.0
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
O libusb ainda executa o comando -1 novamente em usb_claim_interface () ....
Eu acho que a seguinte regra do udev fará o que você deseja:
Seu usuário precisará ser membro do grupo plugdev para obter acesso. Não há necessidade de executar como root com esta regra em vigor.
fonte
Para mim (Debian sid / stretch), o
$id
atributo udev está vazio quando eu conecto meu dispositivo USB. É o$kernel
que contém a sequência necessária para passar para a desconexão do USBHID.Aqui estão as regras do udev que estou usando:
Substitua idVendor e idProduct pelos IDs do seu dispositivo, é claro.
Para escrever esse tipo de regra, o comando a seguir mostrará todos os atributos que você pode usar (para o dispositivo USB fornecido):
Finalmente,
$id
e$kernel
não são variáveis de shell; eles são substituídos pelo analisador udev. Para obter uma lista completa dessas variáveis,man udev
procure%k
.fonte