Verwendung von Udev zur Geräteerkennung und -verwaltung unter Linux
Es erstellt oder entfernt dynamisch Geräteknoten (eine Schnittstelle zu einem Gerätetreiber, die in einem Dateisystem wie eine normale Datei angezeigt wird, die unter dem gespeichert ist / dev Verzeichnis) beim Booten oder wenn Sie ein Gerät zum System hinzufügen oder daraus entfernen. Anschließend werden Informationen zu einem Gerät weitergegeben oder der Status in den Benutzerbereich geändert.
Seine Funktion besteht darin, 1) die Systemanwendungen mit Geräteereignissen zu versorgen, 2) die Berechtigungen von Geräteknoten zu verwalten und 3) nützliche Symlinks in der zu erstellen / dev Verzeichnis für den Zugriff auf Geräte oder sogar das Umbenennen von Netzwerkschnittstellen.
Einer der Profis von udev ist, dass es persistente Gerätenamen verwenden kann, um eine konsistente Benennung von Geräten über Neustarts hinweg zu gewährleisten, trotz ihrer Reihenfolge der Erkennung. Diese Funktion ist nützlich, da der Kernel einfach unvorhersehbare Gerätenamen basierend auf der Reihenfolge der Erkennung zuweist.
In diesem Artikel lernen wir die Verwendung Udev zur Geräteerkennung und -verwaltung auf Linux-Systemen. Beachten Sie, dass die meisten, wenn nicht alle modernen Linux-Distributionen mitgeliefert werden Udev als Teil der Standardinstallation.
Erfahren Sie die Grundlagen von Udev unter Linux
Das udev Daemon, systemd-udevd (oder systemd-udevd.service) kommuniziert mit dem Kernel und empfängt das Gerät Ereignisse Jedes Mal, wenn Sie ein Gerät zum System hinzufügen oder daraus entfernen oder wenn ein Gerät seinen Status ändert.
Udev basiert auf Regeln – seine Regeln sind flexibel und sehr mächtig. Jedes empfangene Geräteereignis wird mit den Regeln abgeglichen, die aus Dateien in gelesen wurden /lib/udev/rules.d und /run/udev/rules.d.
Sie können benutzerdefinierte Regeldateien in die /etc/udev/rules.d/ Verzeichnis (Dateien sollten mit dem enden .rules
Erweiterung), um ein Gerät zu verarbeiten. Beachten Sie, dass Regeldateien in diesem Verzeichnis die höchste Priorität haben.
So erstellen Sie eine Geräteknotendatei: udev muss ein Gerät anhand bestimmter Attribute identifizieren, z Etikette, Ordnungsnummer, die verwendete Haupt- und Nebennummer, die Busgerätenummer und vieles mehr. Diese Informationen werden von der exportiert sysfs Dateisystem.
Wenn Sie ein Gerät mit dem System verbinden, erkennt und initialisiert der Kernel es, und unter wird ein Verzeichnis mit dem Gerätenamen erstellt / sys / Verzeichnis, in dem die Geräteattribute gespeichert sind.
Die Hauptkonfigurationsdatei für udev ist /etc/udev/udev.confund um das Laufzeitverhalten des udev-Daemons zu steuern, können Sie das verwenden udevadm Nützlichkeit.
Anzeigen des empfangenen Kernels Veranstaltungen ((Ereignisse) und udev Ereignisse (was udev nach der Regelverarbeitung sendet), ausführen udevadm mit dem Befehl monitor. Schließen Sie dann ein Gerät an Ihr System an und beobachten Sie vom Terminal aus, wie das Geräteereignis behandelt wird.
Der folgende Screenshot zeigt einen Auszug aus einem HINZUFÜGEN Ereignis nach dem Anschließen eines USB-Flash-Laufwerks an das Testsystem:
$ udevadm monitor
Verwenden Sie das Dienstprogramm lsblk, mit dem der Ihrem USB-Laufwerk zugewiesene Name ermittelt wird sysfs Dateisystem und udev db um Informationen über verarbeitete Geräte zu sammeln.
$ lsblk
Aus der Ausgabe des vorherigen Befehls wird das USB-Laufwerk benannt sdb1
(absoluter Pfad sollte sein /dev/sdb1
). Verwenden Sie die, um die Geräteattribute aus der udev-Datenbank abzufragen info Befehl.
$ udevadm info /dev/sdb1
So arbeiten Sie mit Udev-Regeln unter Linux
In diesem Abschnitt werden wir kurz das Schreiben besprechen udev Regeln. Eine Regel besteht aus einer durch Kommas getrennten Liste eines oder mehrerer Schlüssel-Wert-Paare. Mit Regeln können Sie unter anderem einen Geräteknoten vom Standardnamen umbenennen, Berechtigungen und den Besitz eines Geräteknotens ändern, die Ausführung eines Programms oder Skripts auslösen, wenn ein Geräteknoten erstellt oder gelöscht wird.
Wir werden eine einfache Regel schreiben, um ein Skript zu starten, wenn ein USB-Gerät hinzugefügt und vom laufenden System entfernt wird.
Beginnen wir mit der Erstellung der beiden Skripte:
$ sudo vim /bin/device_added.sh
Fügen Sie die folgenden Zeilen in das Feld ein device_added.sh
Skript.
#!/bin/bash echo "USB device added at $(date)" >>/tmp/scripts.log
Öffnen Sie das zweite Skript.
$ sudo vim /bin/device_removed.sh
Fügen Sie dann die folgenden Zeilen hinzu device_removed.sh
Skript.
#!/bin/bash echo "USB device removed at $(date)" >>/tmp/scripts.log
Speichern Sie die Dateien, schließen Sie sie und machen Sie beide Skripte ausführbar.
$ sudo chmod +x /bin/device_added.sh $ sudo chmod +x /bin/device_removed.sh
Als nächstes erstellen wir eine Regel, um die Ausführung der oben genannten Skripte auszulösen /etc/udev/rules.d/80-test.rules.
$ vim /etc/udev/rules.d/80-test.rules
Fügen Sie diese beiden folgenden Regeln hinzu.
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_added.sh" SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"
wo:
-
"=="
: ist ein Operator, der auf Gleichheit hin verglichen werden muss. -
"+="
: ist ein Operator zum Hinzufügen des Werts zu einem Schlüssel, der eine Liste von Einträgen enthält. - TEILSYSTEM: Entspricht dem Subsystem des Ereignisgeräts.
- AKTION: Entspricht dem Namen der Ereignisaktion.
- ENV {DEVTYPE}: Entspricht einem Geräteeigenschaftswert, in diesem Fall dem Gerätetyp.
- LAUF: Gibt ein Programm oder Skript an, das im Rahmen der Ereignisbehandlung ausgeführt werden soll.
Speichern Sie die Datei und schließen Sie sie. Dann als Wurzel erzählen systemd-udevd zum erneuten Laden der Regeldateien (dies lädt auch andere Datenbanken wie den Kernelmodulindex neu) durch Ausführen.
$ sudo udevadm control --reload
Schließen Sie nun ein USB-Laufwerk an Ihr Gerät an und prüfen Sie, ob das device_added.sh
Skript wurde ausgeführt. Zunächst die Datei scripts.log sollte unter erstellt werden / tmp.
$ ls -l /tmp/scripts.log
Dann sollte die Datei einen Eintrag wie „USB-Gerät zum Datum_Zeit entfernt”, Wie im Screenshot gezeigt.
$ cat /tmp/scripts.log
Weitere Informationen zum Schreiben von udev-Regeln und zum Verwalten von udev finden Sie in der udev und udevadm manuelle Eingaben jeweils durch Ausführen von:
$ man udev $ man udevadm
Zusammenfassung
Udev ist ein bemerkenswerter Geräte-Manager, der eine dynamische Möglichkeit zum Einrichten von Geräteknoten im Internet bietet /dev
Verzeichnis. Es stellt sicher, dass Geräte konfiguriert werden, sobald sie angeschlossen und erkannt werden. Es gibt Informationen über ein verarbeitetes Gerät weiter oder ändert seinen Status in den Benutzerbereich.
Wenn Sie Fragen oder Anregungen zu diesem Thema haben, verwenden Sie das Feedback-Formular.