Udev-Regel für USB-Geräte mit mehreren Knoten

7

Ich habe ein 3G / GPS-Gerät, das 5 tty-Knoten erstellt, obwohl es nur eine physische USB-Verbindung ist. Grundsätzlich ein Multi-Port-USB-Seriell-Adapter.

Ich versuche, einige udevRegeln zu erstellen , um sicherzustellen, dass diese Knoten immer den gleichen Namen oder zumindest einen Symlink zu ihnen haben.

Ich kann das Gerät tatsächlich bei finden /sys/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/. Im Inneren befinden 1-2.2:1.0/sich 1-2.2:1.4/für die 5 Knoten, die es erstellt.

Ich kann es auch bei finden /sys/bus/usb/devices/1-2.2.

Die udev-Informationen für das Gerät lauten wie folgt:

udevadm info -a -p /sys/bus/usb/devices/1-2.2/1-2.2\:1.0
looking at device '/bus/usb/devices/1-2.2/1-2.2:1.0':
KERNEL=="1-2.2:1.0"
SUBSYSTEM=="usb"
DRIVER=="option"
ATTR{bInterfaceNumber}=="00"
ATTR{bAlternateSetting}==" 0"
ATTR{bNumEndpoints}=="03"
ATTR{bInterfaceClass}=="ff"
ATTR{bInterfaceSubClass}=="01"
ATTR{bInterfaceProtocol}=="01"
ATTR{modalias}=="usb:v12D1p1506d0000dc00dsc00dp00icFFisc01ip01"
ATTR{supports_autosuspend}=="0"

Ab diesem Zeitpunkt haben alle Knoten die gleichen Informationen. Das einzige, was zwischen den Knoten variiert, ist die Eigenschaft bInterfaceNumber und der Gerätepfad. Also dachte ich daran, eine Regel über den Entwicklungspfad zu schreiben.

Aus irgendeinem Grund wird die folgende Regel von all diesen Knoten abgeglichen.

ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0" SYMLINK+="huawey0"

Zeigt also im Grunde genommen huawey0auf den zuletzt aufgezählten Knoten. Das Gerät hat Knoten von ttyUSB2 bis 6 erstellt, und dieser Link verweist auf USB6.

Also habe ich es mit dem Kernelknoten versucht:

ACTION=="add", KERNEL=="1-2.2:1.0" SYMLINK+="huawey0"

Jetzt erscheint nichts auf / dev.

Danach habe ich versucht, sie mit der bInterfaceNumber zu trennen. Ich habe die folgende Regel verwendet

ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]" ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"

Und trotzdem passiert nichts. Ich habe sogar eine abgespeckte Version der Regel ausprobiert.

ACTION=="add", ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"

Und immer noch passiert nichts. Warum passt es nicht zusammen?

Joao Pincho
quelle

Antworten:

5

Ihre Regeln enthalten alle Syntaxfehler:

  1. =ist für die Zuordnung ==ist zum Vergleich, also haben Sie nicht wirklich auf das geschaut, was DEVgleich war, Sie haben es zugewiesen.
  2. Sie brauchen ,zwischen allen Aussagen, es gab keine vorher SYMLINK+=.

Faustregel

ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0", SYMLINK+="huawey0"

Zweite Regel

ACTION=="add", KERNEL=="1-2.2:1.0", SYMLINK+="huawey0"

Dritte Regel

ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"

Vierte Regel

ACTION=="add", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"

Alle diese Regeln sollten jetzt tun, was Sie wollen (ich würde die erste persönlich verwenden).

Alex Layton
quelle
4

Obwohl dieser Beitrag vor drei Jahren gestellt wurde und die Antwort möglicherweise nicht beantwortet wird, möchte ich meine erfolgreichen Erfahrungen hier zum späteren Nachschlagen weitergeben.

Laut Jens Reimanns Identifizieren von GSM-Modemgeräten mit udev "befindet sich das Geräteattribut" bInterfaceNumber "nicht auf dem tty-Gerät, sondern auf dem USB-Gerät in der übergeordneten Hierarchie", daher habe ich zwei Regeln für mein FTDI-USB-zu-4-Gerät erstellt. Port-Seriell-Adapter:

SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="ttyUSB_FTDI_4_PORT_%E{.LOCAL_ifNum}"

Dadurch wird das Attribut "bInterfaceNumber" in der Umgebungsvariablen ".LOCAL_ifNum" gespeichert (der vorangestellte Punkt ist eine Notation für temporäre oder versteckte Variablen). In der zweiten Regel wird dieselbe Variable mit der Syntax "% E" aufgerufen. Neuere udev-Versionen unterstützen auch "$ env" anstelle von "% E".
(von Jens Reimann)

Wo ttyUSB_FTDI_4_PORT_ist der Symlink-Name? Diese beiden Regeln werden Symlinks erstellen , wie ttyUSB_FTDI_4_PORT_00, ttyUSB_FTDI_4_PORT_01, ttyUSB_FTDI_4_PORT_02, ttyUSB_FTDI_4_PORT_03. Sie können ein ATTRS{serial}Attribut hinzufügen , um die Aufzählung weiter einzuschränken.

Jens Reimann würdigte auch den Beitrag von Ketan Patels U & L-Frage, Udev-Regeldatei für Modem funktioniert nicht , mit akzeptierter Antwort von derobert .

Roice
quelle
0

Neben Alex 'Kommentaren gibt es noch ein weiteres Problem. Es scheint ATTR{bInterfaceNumber}aus irgendeinem Grund nicht zu funktionieren. Um die Antwort auf eine verwandte Frage zu zitieren , sollten Sie etwas in der Art von verwenden

SUBSYSTEM=="tty", ACTION=="add", \
    ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}="2303", \
    ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="test_USB0"
Dan Stahlke
quelle