GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie binde ich ein USB-Gerät unter einem statischen Namen?

Wie vorgeschlagen, können Sie einige udev-Regeln hinzufügen. Ich habe den /etc/udev/rules.d/10-local.rules bearbeitet enthalten:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"

Sie können die Variablen Ihres Geräts überprüfen, indem Sie

ausführen
udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

Es gibt eine ausführlichere Anleitung, die Sie unter http://www.reactivated.net/writing_udev_rules.html

lesen können

Die obige Regelsyntax funktioniert möglicherweise auf einigen Distributionen, funktionierte jedoch nicht auf meiner (Raspbian). Da ich nie ein einziges Dokument gefunden habe, das alle Einzelheiten erklärt, habe ich mein eigenes geschrieben, das hier zu finden ist. Darauf läuft es hinaus.
1. Finden Sie heraus, was auf ttyUSB ist:

dmesg | grep ttyUSB  

2. Alle Attribute des Geräts auflisten:

udevadm info --name=/dev/ttyUSBx --attribute-walk

(natürlich mit Ihrer(n) Gerätenummer(n) statt x). Wählen Sie einen eindeutigen Kennungssatz aus, z. B. idVendor + idProduct. Möglicherweise benötigen Sie auch die Seriennummer, wenn Sie mehr als ein Gerät mit demselben idVendor und idProduct haben. Seriennummern sollten für jedes Gerät eindeutig sein.
3. Erstellen Sie eine Datei /etc/udev/rules.d/99-usb-serial.rules mit so etwas wie dieser Zeile darin:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(vorausgesetzt, Sie benötigen dort keine Seriennummer, und natürlich mit den Nummern für idVendor und idProduct, die Sie in Schritt 2 gefunden haben.
4. Laden Sie die neue Regel:

sudo udevadm trigger

5. Überprüfen Sie, was passiert ist:

ls -l /dev/your_device_name  

zeigt an, zu welcher ttyUSB-Nummer der Symlink ging. Wenn es /dev/ttyUSB1 ist , überprüfen Sie dann, wem das gehört und zu welcher Gruppe es gehört:

ls -l /dev/ttyUSB1   

Dann nur so zum Spaß:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

Das Problem mit mehreren identischen USB-Geräten

Ich habe einen Rasperry Pi mit vier Kameras. Ich mache Bilder mit fswebcam die die Kameras als /dev/video0 identifiziert .. video3 . Manchmal ist die Kamera video0 , vide02 , video4 und video6 aber das können wir jetzt vergessen.

Ich brauche eine persistente ID, um eine Kameranummer zu identifizieren, damit z. video0 ist immer die selbe kamera weil ich die bilder beschrifte. Leider geschieht dies nicht zuverlässig - beim Booten werden die Kameras als video0 aufgelistet ..video3 aber nicht immer gleich.

Die Kameras haben alle dieselbe ID und Seriennummer.

Die Lösung für dieses Problem beinhaltet udev-Regeln, aber es gibt dort auch viele Angelhaken.

Wenn Sie den Befehl

ausgeben
udevadm info –attribute-walk –path=/dev/video0

Sie erhalten eine Reihe von Ergebnissen, aber die hervorstechenden Teile sind

KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.

Das KERNELS-Bit ist ein USB-Hub-Port. Bei vier Kameras sind es vier davon - sie ändern sich beim Neustart nicht, aber die video{x} einem Port zugeordnet darf ändern.

Wir brauchen also eine udev-Regel, um eine Videonummer an einen USB-Hub-Port zu binden - so etwas wie:

KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0” 

Sieht einfach aus – greifen Sie mit

auf die Kamera zu
fswebcam –d  $realpath /dev/camera0

Nur dass es nicht funktioniert – wenn Sie dies in eine udev-Regel einfügen und das System video0 (beim Booten) einem anderen Port zugewiesen hat, wird die udev-Regel ignoriert. Der symbolische Link zu /dev/camera0 sagt im Grunde no such device . Platz eins.

Wir wollen einen Symlink an eine USB-Hub-Adresse binden, nicht an video{x} Nummer. Es brauchte ein Python-Programm.

Der erste Schritt war zu laufen

fswebcam –d /dev/video${x}  tst.jpg

für x zwischen 1 und 8. Die Existenz von tst.jpg erkennt nach jedem Anruf, ob auf dieser Videonummer eine Kamera vorhanden ist. Erstellen Sie daraus eine Liste mit aktiven Videonummern. Meiner Erfahrung nach ist es entweder 0,1,2,3 oder 0,2,4,6 für Kameras, die ich verwendet habe.

Andere können diese Liste natürlich mit einem anderen Verfahren erstellen.

Dann für jede Videonummer in der Liste run

udevadm info –attribute-walk –path=/dev/videox > dd

und entpacke den KERNELS= line ab dd . Nach diesem Vorgang erhalten Sie eine Liste der USB-Port-Adressen für die Kameras. Sortieren Sie diese Liste so, dass Sie sie im nächsten Schritt immer in der gleichen Reihenfolge abarbeiten. Nennen Sie dies die "Adressliste".

Führen Sie udevadm … > dd aus Ding noch einmal und erstelle eine Liste, die so aussieht

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.

Gehen Sie nun die Adressliste durch - suchen Sie zu jedem Eintrag den entsprechenden Eintrag aus der Videoliste. Erstellen Sie eine neue Liste, die wie eine Ansammlung von Zeilen wie

aussieht
KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”

Das x (Symlink-Nummer) wird durch die Sequenznummer in der Adressliste ersetzt.

Jetzt haben Sie eine udev-Regel, die funktioniert. Ein symbolischer Link, der an eine USB-Hub-Adresse gebunden ist, unabhängig davon, welche Videonummer diesem Port beim Booten zugewiesen wird.

Schreiben Sie die endgültige Liste in eine Datei /etc/udev/rules.d/cam.rules . Führen Sie udevadm trigger aus um es zu aktivieren und die Arbeit ist erledigt. /dev/camera2 immer dieselbe Kamera (USB-Anschluss) sein, unabhängig von ihrer Videonummer.


Linux
  1. 4 Nützliche Möglichkeiten, den Namen des angeschlossenen USB-Geräts unter Linux zu ermitteln

  2. Zuordnung einer Gerätenummer zu einem logischen Gerätenamen

  3. Wie sage ich in der systemd-Dienstdatei, dass USB bereit ist?

  4. Wie binde ich v4l2 USB-Kameras auch nach dem Neustart an dieselben Gerätenamen?

  5. So ermitteln Sie die USB-Version 1.1 oder 2.0

So ermitteln Sie die Bandbreitennutzung von USB-Geräten unter Linux

So verwenden Sie ein USB-Laufwerk unter Debian 10

Wie wird das Leapfrog Tag USB-Gerät montiert?

Wie zeigt man eine Benachrichtigung an, wenn ein USB-Gerät eingesteckt wird?

So ordnen Sie Ihrer Domain eine statische IP zu (mit GoDaddy-Beispiel)

Wie überprüfen Sie, wie viel Strom ein USB-Anschluss liefern kann?