Unterschied zwischen / dev und / sys / class?


Antworten:


26

Die Dateien in /devsind tatsächliche Gerätedateien, die UDEV zur Laufzeit erstellt. Das Verzeichnis /sys/classwird 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.

Verwendung?

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 /devoder arbeiten können /sys, und das hängt von Ihren persönlichen Vorlieben ab. Normalerweise würde ich jedoch versuchen, /sysTools udevadmzu 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"
...

Ich bin mir nicht sicher, ob ich dich richtig verstanden habe. Bitten Sie also um Klarstellung, um sicherzugehen. Ob Sie sich für eine Schnittstelle zu einem externen Gerät (z. B. über i2c oder mipi) entscheiden, indem Sie einen Eintrag in / dev oder / sys erstellen, hängt ausschließlich von Ihren persönlichen Vorlieben ab? Wenn nicht, in welchem ​​Fall / warum sollte man sich lieber für den ersteren anstelle des letzteren (und umgekehrt) entscheiden?
LandonZeKepitelOfGreytBritn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.