Erstellen von Geräte-symlink mit udev basierend auf Gerät Antwort, nicht udev-device-info
Habe ich drei verschiedene serielle Geräte an drei usb-Seriell-Wandler (FTDI-USB-RS232). Wenn ich Sie verbinden möchte, bekomme ich generischen device-Namen /dev/ttyUSBx als erwartet. Wenn ich versuche zu schreiben, einige udev-Regeln, udevadm zeigt mir die gleiche Ausgabe für die drei Geräte mit Ausnahme einiger Geräte serial id-Attribute.
Diejenigen, die serial id ' s ändern sich auf jedem Gerät so, wenn ich einen anderen usb-serial-Konverter, der meine Regeln nicht mehr funktionieren. Also, ich brauche einen Weg für die Kommunikation mit dem Gerät, das an die serielle Konverter und identifizieren es durch seine Antwort.
"Writing udev rules" HOWTO, sagt das folgende über die Verwendung von PROGRAMM-Funktionalität Anruf ein externes Programm, um Geräte zu benennen:
PROGRAMM dient zum ausführen von Programmen, die device-Namen (und sollten Sie nicht tun alles andere als das). Wenn diese Programme ausgeführt werden, die Vorrichtung Knoten wurde noch nicht erstellt, so wirken auf das Gerät in irgendeiner Weise ist nicht möglich,
Regel Beispiel:
SUBSYSTEM=="usb", PROGRAM="/bin/device_namer %k", SYMLINK+="%c"
so kann ich nicht schreiben auf /dev/ttyUSBx von dort, das Gerät zu identifizieren. Dann habe ich die RUN-Funktionalität, aber es scheint, dass Sie können nicht erstellen Sie einen neuen SYMLINK, da udev nicht erhalten, FÜHREN Sie die Ausgabe.
Regel Beispiel:
SUBSYSTEM=="usb", RUN="/bin/program"
Kann ich anweisen, udev aus, dass die " RUN " - Skript zum erstellen des symlink? Oder kann ich erstellen, dass der symlink von hand von dort?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blind im Chat auf einen seriellen port automatisch in dem moment an den computer angeschlossen ist, ist eine ziemlich beängstigende Sache zu tun. Sind Sie sicher, dass Sie dies tun wollen? Zunächst einmal wird es einige Zeit in Anspruch nehmen, das verzögert die Erscheinung des device-node, wenn udev hat zu warten, für ein Ergebnis, bevor Sie ihn erstellen. Wenn das Gerät zufällig ausgeschaltet oder die serielle Schnittstelle ist unterbrochen, dann werden Sie nicht in der Lage sein, einen Namen richtig (und müssen Sie haben ein Zeitlimit, um dies zu erkennen). Schließlich, wenn ein anderes Gerät neben einem von denen, die Sie erwarten, verbunden ist, können Sie senden es Müll, hat unbeabsichtigte Folgen.
Könnten Sie in Erwägung ziehen, sich auf die Adapter-Seriennummern zu sagen, Sie auseinander und ordnen Sie die einzelnen Adapter, um ein externes Gerät in konsistenter Weise. Wenn Ihr Adapter auch haben echte serielle zahlen anstelle der Platzhalter-Zeichenfolgen wie 00000000, dann sind Sie schon glücklich!
Dennoch ist dies, wie Sie es tun würde.
Als Sie den Verdacht, Sie können nicht
RUN
, denn das ist zu spät, das Gerät Knoten bereits erstellt wurde. Verwenden SiePROGRAM
. In Ihrem Programm sind Sie gehen zu müssen, erstellen Sie die device-Knoten selbst mitmknod
weil udev nicht gemacht hat es trotzdem. Erstellen Sie einen temporären Knoten in einen temporären Speicherort an und zerstören es, bevor dein Programm beendet wird.ist es eigentlich möglich, ein Gerät zu kreieren symlink basiert auf Gerät Antwort, mit
PROGRAM
trotz Dokumentation sagt. Dass es nur für symlinks, nicht-Gerätenamen.Sich bewusst sein, dass jede Regel entspricht, die NACH Ihnen und gibt eine
SYMLINK
, sollte das so sein,damit Ihre SIMLINK-Spezifikation wird verkettet mit der neuen ein. Im anderen Fall, Ihre symlink gelöscht.
Beste Weg, zu wissen, was in
udev
ist die Einstellung der log-level auf debug:Finden Sie diese Protokolle in
/var/log/messages
oder/var/log/syslog
je nach Ihrer Distribution.