Infos zu udev/eudev

eudev

ist Gentoo’s gepflegter Fork von udev, Systemd’s Device File Manager für den Linux Kernel. [1] Es verwaltet Geräteknoten in / dev und behandelt alle Benutzerbereichsaktionen beim Hinzufügen oder Entfernen von Geräten.

Das Ziel von eudev ist es, eine bessere Kompatibilität mit existierender Software wie OpenRC, Upstart, älteren Kernel, verschiedenen Toolchains und allem, was sonst noch benötigt wird, zu erhalten (aber nicht durch udev unterstützt). Konfigurationen, die systemd verwenden, sollten es nicht verwenden.

USE-Flags:

hwdb Lesen Sie die Anbieter- / Geräte-String-Datenbank und fügen Sie sie zur udev-Datenbank hinzu local
introspection Fügen Sie Unterstützung für GObject-basierte Introspektion hinzu global
kmod Aktivieren Sie das Laden von Modulen über libkmod local
rule-generator Legacy-Regeln Generator-Regeln und Support-Skripte installieren – beachten Sie, dass die Funktionalität innerhalb von sys-fs / udev weggelassen wurde, da es nicht in allen Fällen stabil ist; Benutzung auf eigene Gefahr local
selinux !!nur für den internen Gebrauch!! Security Enhanced Linux-Unterstützung, diese muss vom selinux-Profil gesetzt werden oder es tritt ein Break auf global
static-libs Erstellen Sie auch statische Versionen von dynamischen Bibliotheken global
test Problemumgehung zum Abrufen von Paketen, die zur Ausführung mit FEATURES = test benötigt werden. Portage-2.1.2 behandelt dies intern, also setze es nicht mehr in make.conf / package.use

Das Verzeichnis / dev

Die meisten Linux-Benutzer verstehen, dass / dev / sda1 nur eine schnelle Möglichkeit darstellt, auf die erste Partition auf der ersten Festplatte zu verweisen, die der Kernel gefunden hat. Das ist ziemlich einfach, oder?

Aber betrachten Sie hotpluggable Geräte wie USB, IEEE1394, Hot-Swap-fähige PCI, etc. Was ist das erste Gerät für jede dieser? Und für wie lange? >Wie werden die anderen Geräte benannt, wenn der erste verschwindet? Wie wirkt sich das auf laufende Transaktionen aus? Wäre es nicht lustig, wenn ein Druckauftrag plötzlich von einem High-End-Laserdrucker auf einen fast toten Matrixdrucker verlagert würde, nur weil jemandes Mutter beschlossen hat, den Stecker des Laserdruckers zu ziehen (was zufällig der erste Drucker war)?

Ein moderner Gerätemanager (einschließlich udev und eudev) kann:

  • Im Benutzerbereich ausführbar sein
  • Dynamische Erstellung und Entfernung von Gerätedateien regeln
  • Bereitstellung einheitlicher Gerätenamen
  • Stellt eine Userspace-Anwendungsprogrammschnittstelle (API) bereit.

Jedes Mal, wenn eine Änderung in der Gerätestruktur auftritt, gibt der Kernel ein Ereignis aus, das vom Gerätemanager abgerufen wird. Der Gerätemanager folgt dann den Regeln, die in den Verzeichnissen /etc/udev/rules.d, /run/udev/rules.d und /lib/udev/rules.d deklariert sind. Basierend auf den Informationen, die in dem Ereignis enthalten sind, findet es die Regeln oder Regeln, die es zum Auslösen benötigt, und führt die erforderlichen Aktionen aus. Diese Aktionen können das Erstellen oder Löschen von Gerätedateien beinhalten und das Laden bestimmter Firmware-Dateien in den Kernel-Speicher auslösen.

Um einen Eintrag in die World-Datei  zu vermeiden, sollte die Oneshot-Option verwendet werden.
 

root  # emerge --ask --oneshot sys-fs/eudev

RC-Service

Der RC-Name ist udev, nicht eudev. Es muss im sysinit Runlevel registriert werden.

root  #  rc-update add udev sysinit
* rc-update: udev already installed in runlevel `sysinit'; skipping

Ab sys-fs / udev-init-scripts Version 29 sollte udev-trigger auch dem sysinit runlevel hinzugefügt werden.

 

Die Migration von udev 216 auf eudev 1.10-r2 (März 2015) ist unkompliziert:

root # emerge --ask --oneshot sys-fs / eudev

Falls das System multilib verwendet und beispielsweise das Attribut abi_x86_32 USE gegenüber dem älteren udev-Paket aktiviert ist, dann vergessen Sie nicht, es auch zu ändern:

 
Wechsel von udev to eudev in /etc/portage/package.use

# sys-fs/udev abi_x86_32
sys-fs/eudev abi_x86_32

 

Behalten Sie die klassische ‚eth0‘-Benennung bei:

Die vom Kernel bereitgestellten Netzwerkgeräte-Namen eth0, wlan0 usw. können beim Booten (siehe dmesg) durch die Regel /lib/udev/rules.d/80-net-name-slot.rules udev geändert werden. Um die klassische Benennung beizubehalten, kann diese Regel mit einer gleichnamigen leeren Datei im Verzeichnis /etc/udev/rules.d überschrieben werden:

root # touch /etc/udev/rules.d/80-net-name-slot.rules

Alternativ können Sie net.ifnames = 0 zur Kernel-Befehlszeile hinzufügen, die Standardrichtlinie ändern oder eine benutzerdefinierte erstellen.

Eine interessante Ressource im Zusammenhang mit der Netzwerkbenennung ist, I don’t like this, how do I disable this
Verwenden Sie eine neue „vorhersagbare“ Benennung

Die neue Namenskonvention für Netzwerkschnittstellen ist nicht identisch, daher müssen Schnittstellen neu verknüpft werden. Verwenden Sie /etc/init.d/net.lo als Verknüpfungsziel für alle Schnittstellennamen, die hinzugefügt werden müssen. Stellen Sie sicher, dass <Schnittstellenname> in den folgenden Befehlen durch die im System vorhandenen Ethernet-Schnittstellennamen ersetzt wird. Mit dem Befehl ifconfig kann festgestellt werden, welche Schnittstellen existieren

user $ ifconfig

Erstellen Sie symbolische Links für die vorhandenen Schnittstellen in den Verzeichnissen /etc/init.d/ und /etc/conf.d/:

root  # ln -s /etc/init.d/net.lo /etc/init.d/net.<interface_name>

Fügen Sie das / die Skript (e) dem Standard-Runlevel hinzu, damit die Schnittstelle (n) automatisch gestartet werden:

root # rc-update add net.<interface_name> default

Fehlerbehebung

Verwenden von udevadm

Starten Sie udevadm Monitor und sehen Sie, was passiert:

user $ udevadm Monitor

Rufen Sie die Geräteinformationen mithilfe von udevadm-Informationen ab, gefolgt vom Gerätepfad:

udevadm info -p /devices/pci0000:00/0000:00:1d.7

Rufen Sie den Gerätepfad unter Verwendung seines Namens ab:

user $ devadm info -q path -n input/mouse1 /devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3.4/1-3.4:1.0/0003:46D:C404.0006/input/input24/mouse1

Testen Sie einen Ereignislauf mit udevadm test, gefolgt vom Gerätepfad, für den ein Ereignis getestet werden soll:

user $ udevadm test /devices/pci0000:00/0000:00:1d.7

Um eine Liste aller udevadm-Befehle zu erhalten:

user $ udevadm -h

Quellen:
https://wiki.gentoo.org/wiki/Udev

https://wiki.gentoo.org/wiki/Eudev

https://forums.gentoo.org/viewtopic-t-966786-start-0.html

https://forums.gentoo.org/viewtopic-p-7712064.html