Was ist der Unterschied zwischen der Gerätedarstellung in /dev
und der in /sys/class
?
Wird einer dem anderen vorgezogen? Gibt es etwas, das einer anbietet und das andere nicht?
Was ist der Unterschied zwischen der Gerätedarstellung in /dev
und der in /sys/class
?
Wird einer dem anderen vorgezogen? Gibt es etwas, das einer anbietet und das andere nicht?
Antworten:
Die Dateien in /dev
sind tatsächliche Gerätedateien, die UDEV zur Laufzeit erstellt. Das Verzeichnis /sys/class
wird vom Kernel zur Laufzeit exportiert und legt die Hierarchie der Hardware offen sysfs
.
Aus dem libudev und Sysfs Tutorial
Auszug
Auf Unix- und Unix-ähnlichen Systemen wird auf Hardwaregeräte über spezielle Dateien (auch Gerätedateien oder -knoten genannt) zugegriffen, die sich im Verzeichnis / dev befinden. Diese Dateien werden wie normale Dateien gelesen und beschrieben, aber anstatt Daten auf eine Festplatte zu schreiben und zu lesen, kommunizieren sie direkt mit einem Kerneltreiber, der dann mit der Hardware kommuniziert. Es gibt viele Online-Ressourcen, die / dev-Dateien detaillierter beschreiben. Traditionell wurden diese speziellen Dateien zum Zeitpunkt der Installation von der Distribution mit dem Befehl mknod erstellt. In den letzten Jahren haben Linux-Systeme begonnen, diese / dev-Dateien zur Laufzeit mit udev zu verwalten. Beispielsweise erstellt udev Knoten, wenn Geräte erkannt werden, und löscht diese, wenn Geräte entfernt werden (einschließlich Hotplug-Geräte zur Laufzeit). Diesen Weg,
ein weiterer Auszug
Die Verzeichnisse in Sysfs enthalten die Hierarchie der Geräte, wie sie an den Computer angeschlossen sind. Auf meinem Computer befindet sich das hidraw0-Gerät beispielsweise unter:
/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4:1.0/0003:04D8:003F.0001/hidraw/hidraw0
Basierend auf dem Pfad wird das Gerät an die Konfiguration 1 (: 1.0) des Geräts angeschlossen, das an Port 4 von Gerät 1-5 angeschlossen ist und an den USB-Controller 1 (usb1) angeschlossen ist PCI-Bus. Dieser Verzeichnispfad ist zwar interessant, bringt uns aber nicht viel, da er davon abhängt, wie die Hardware physisch mit dem Computer verbunden ist.
Glücklicherweise bietet Sysfs auch eine große Anzahl von Symlinks für den einfachen Zugriff auf Geräte, ohne dass Sie wissen müssen, an welche PCI- und USB-Ports sie angeschlossen sind. In / sys / class gibt es ein Verzeichnis für jede Geräteklasse.
Im Allgemeinen verwenden Sie Regeln /etc/udev/rules.d
, um Ihr System zu erweitern. Es können Regeln erstellt werden, um Skripts auszuführen, wenn verschiedene Hardware vorhanden ist.
Sobald ein System hochgefahren ist, können Sie Skripte schreiben , mit denen Sie entweder /dev
oder arbeiten können /sys
, und das hängt von Ihren persönlichen Vorlieben ab. Normalerweise würde ich jedoch versuchen, /sys
Tools udevadm
zu verwenden, um UDEV nach Speicherorten verschiedener Systemressourcen abzufragen.
$ udevadm info -a -p $(udevadm info -q path -n /dev/sda) | head -15
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976773168"
ATTR{stat}==" 6951659 2950164 183733008 41904530 16928577 18806302 597365181 580435555 0 138442293 622621324"
ATTR{range}=="16"
...