Como desabilitar os dispositivos USB com base no seu ID de fornecedor no GNU / Linux?

5

Em essa pergunta , alguém queria uma lista negra para todos os dispositivos USB e, depois, permitir apenas dispositivos específicos.

Nesta pergunta, queremos aceitar todos os dispositivos USB, mas impedir que o driver (por exemplo, cdc_acm ) tome um tipo de dispositivo específico - por exemplo, um Tijolo LEGO® NXT no modo flash não deve ser tomado (porque fwflash precisa de acesso bruto ao dispositivo), mas uma placa Arduino ainda deve ser acessada pelo driver para produzir /dev/ttyACM0 , em um ambiente educativo acessando o hardware do NXT e do Arduino.

    
por mirabilos 03.11.2014 / 14:51

1 resposta

5

Eu consegui fazer isso com uma regra do udev, depois de algum truque (e usando lsusb para descobrir o fornecedor e o ID do produto do dispositivo no modo flash):

$ cat /etc/udev/rules.d/nxt.rules
# disable NXT in flash mode
ACTION=="add", ATTR{idVendor}=="03eb", ATTR{idProduct}=="6124", RUN="/bin/sh -c '/bin/echo -n $kernel:1.0 | /usr/bin/tee /sys/bus/usb/drivers/cdc_acm/unbind | /usr/bin/logger -t nxt-flashmode'"

Esta regra é acionada quando um bloco NXT é conectado no modo flash, ou colocado no modo flash enquanto conectado. Ele não impede que cdc_acm o pegue, mas imediatamente depois diz para liberar o dispositivo, então fwflash pode acessá-lo.

Eu não descobri o que é o :1.0 e por que usar isso e não :1.1 , que também aparece no sysfs. No entanto, eu queria compartilhar uma solução funcional (para mim). Ambiente: Debian instável a partir do final de outubro de 2014 (ou seja, praticamente Debian jessie).

    
por 03.11.2014 / 14:51