
Ich habe eine USB<->GPIB-Brücke von National Instruments. Es handelt sich um eine USB-Karte, die ein spezielles Verfahren benötigt, um nutzbar zu werden. Ich habe das Paket linux_gpib installiert, das zwei Kernelmodule bereitstellt: gpib_common
und ni_usb_gpib
. Außerdem muss das gpib_config
Tool ausgeführt werden, bevor ich mit einem Instrument auf dem GPIB-Bus kommunizieren kann. Der Trick besteht darin, dass die Karte nach dem Einstecken in den USB-Anschluss etwa 2 Sekunden zur internen Initialisierung benötigt, bevor gpib_config
der Befehl wirksam wird. Daher habe ich die folgende 99-gpib.rules
Udev-Regel, die den Job perfekt erledigt:
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"
Das Problem ist, dass es nur funktioniert, wenn ich die Karte anschließe, während das Hostsystem läuft. Wenn ich mit eingestecktem Dongle neu starte, sehe ich, dass beide Kernelmodule geladen sind, aber die Karte ist unbrauchbar, was bedeutet, dass das gpib_config
Tool nicht ausgeführt wurde. Wenn ich es manuell ausführe, funktioniert es perfekt.
Da ein Neustartszenario realistischer ist als das Anschließen bei laufendem System, muss ich die richtige Methode finden, damit udev dies beim Booten tut. Natürlich kann ich ein Init-Skript schreiben, das prüft, ob die Karte angeschlossen ist und Kernelmodule geladen sind, und das Tool während des Ladevorgangs ausführen, aber das ist die Aufgabe von udev, da es, glaube ich, etwas mit der Hardware zu tun hat. Irgendwelche Ideen?
Antwort1
Das Problem liegt in udev, das RUN-Sachen ausführtVorentsprechende Module werden geladen, daher gpib_config
schlägt die Konfiguration der Karte fehl. Problemumgehung besteht darin, Module vor dem Udev-Start beim Systemstart zu laden. Keine wirkliche Lösung, glaube ich.