Executando regras do udev na inicialização

Executando regras do udev na inicialização

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_commone ni_usb_gpib. Além disso, a gpib_configferramenta 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_configo comando entre em vigor. Então, eu tenho a seguinte 99-gpib.rulesregra 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_configferramenta 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_configfalha 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.

informação relacionada