
Tengo el puente USB<->GPIB de National Instruments. Es una placa USB que necesita un procedimiento especial para volverse utilizable. Tengo instalado el paquete linux_gpib que proporciona dos módulos del kernel: gpib_common
y ni_usb_gpib
. Además, la gpib_config
herramienta debe ejecutarse antes de que pueda hablar con cualquier instrumento en el bus GPIB. El truco es que la placa necesita aproximadamente 2 segundos después de conectarse al USB para la inicialización interna antes de que gpib_config
el comando surta efecto. Entonces, tengo la siguiente 99-gpib.rules
regla udev que hace el trabajo perfecto:
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"
El problema es que sólo funciona si conecto la placa cuando el sistema host está en funcionamiento. Cuando reinicio con el dongle conectado puedo ver ambos módulos del kernel cargados, pero la placa no se puede utilizar, lo que significa que la gpib_config
herramienta no se ejecutó. Si lo ejecuto a mano funciona perfectamente.
Dado que el escenario de reinicio es más real y luego lo conecta mientras el sistema se está ejecutando, necesito la forma correcta de hacer que udev haga esto al arrancar. Claro, puedo escribir algún script de inicio que verifique si la placa está conectada y los módulos del kernel están cargados y ejecutará la herramienta durante el proceso de carga, pero creo que este es un trabajo de udev porque tiene que ver con el hardware. ¿Algunas ideas?
Respuesta1
El problema está en udev que ejecuta cosas RUN.antesSe cargan los módulos correspondientes, por lo tanto gpib_config
no se puede configurar la placa. La solución alternativa es cargar los módulos antes de iniciar udev al iniciar el sistema. Creo que no es una solución real.