
Eu tenho a ponte USB<->GPIB da National Instruments. É uma placa USB que necessita de procedimentos especiais para se tornar utilizável. Eu tenho o pacote linux_gpib instalado que fornece dois módulos de kernel: gpib_common
e ni_usb_gpib
. Além disso, a gpib_config
ferramenta deve ser executada antes que eu possa falar com qualquer instrumento no barramento GPIB. O truque é que a placa precisa de cerca de 2 segundos depois de ser conectada ao USB para inicialização interna antes que gpib_config
o comando entre em vigor. Então, eu tenho a seguinte 99-gpib.rules
regra do udev que faz o trabalho perfeitamente:
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3923", ATTR{idProduct}=="709b", RUN+="/bin/sh -c '/usr/bin/sleep 2; /usr/sbin/gpib_config --minor 0'"
KERNEL=="gpib[0-9]*", MODE="0660", GROUP="gpib"
O problema é que só funciona se eu conectar a placa quando o sistema host estiver instalado e funcionando. Quando reinicio com o dongle conectado, posso ver os dois módulos do kernel carregados, mas a placa está inutilizável, o que significa que a gpib_config
ferramenta não foi executada. Se eu executar manualmente, funciona perfeitamente.
Como o cenário de reinicialização é mais real, conecte-o enquanto o sistema está em execução, preciso da maneira correta de fazer o udev fazer isso na inicialização. Claro, posso escrever algum script de inicialização que irá verificar se a placa está conectada e os módulos do kernel estão carregados e executar a ferramenta durante o processo de carregamento, mas este é um trabalho do udev porque tem algo a ver com hardware, eu acho. Alguma ideia?
Responder1
O problema está no udev que executa coisas RUNantescarregamento dos módulos correspondentes, portanto, gpib_config
falha na configuração da placa. A solução alternativa é carregar os módulos antes da inicialização do udev na inicialização do sistema. Não é uma solução real, eu acho.