Executando regras do udev na inicialização

1

Eu tenho a ponte National Instruments USB < - > GPIB. É uma placa USB que precisa de um procedimento especial para se tornar utilizável. Eu tenho o pacote linux_gpib instalado que fornece dois módulos do kernel: gpib_common e ni_usb_gpib . Além disso, o mastro da ferramenta gpib_config pode ser executado antes que eu possa falar com qualquer instrumento no barramento GPIB. O truque é que a placa precisa de cerca de 2 segundos depois que ela foi conectada ao USB para inicialização interna antes que o comando gpib_config tenha efeito. Então, eu tenho a seguinte regra de 99-gpib.rules udev que faz o trabalho perfeito:

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 funcionando. Quando eu reinicio com o dongle conectado, consigo ver ambos os módulos do kernel carregados, mas a placa está inutilizável, o que significa que a ferramenta gpib_config não foi executada. Se eu executar manualmente, funcionará perfeitamente.

Como o cenário de reinicialização é mais real, conectando-o enquanto o sistema está em execução, eu preciso da maneira correta de fazer o udev fazer isso na inicialização. Claro, eu 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 rodar a ferramenta durante o processo de carregamento, mas isso é trabalho do udev, algo para lidar com hardware, eu acho. Alguma idéia?

    
por e-pirate 04.11.2016 / 09:16

1 resposta

1

O problema está no udev que executa o material RUN antes de carregar os módulos correspondentes, portanto gpib_config falha ao configurar a placa. A solução alternativa é carregar módulos antes da inicialização do udev na inicialização do sistema. Não é uma solução real, eu acho.

    
por 05.11.2016 / 00:18

Tags