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

Linux – Sysfs und Devtmpfs?

Ulrich Dangel erklärt sehr gut den Unterschied zwischen devtmpfs und udev.

Was ist mit sysfs?

Ich verstehe, dass der Kernel sysfs verwendet, um Geräteknoten in den Benutzerbereich zu exportieren, die von udev verwendet werden. Also sind devtmpfs und sysfs gleich? Wenn ja, warum verwenden sie unterschiedliche Namen? Wenn nein, was ist der wirkliche Unterschied zwischen sysfs und devtmpfs?

Akzeptierte Antwort:

Der Kernel verwendet sysfs, um Geräteknoten in den Benutzerbereich zu exportieren, die von udev verwendet werden

Nein. Sysfs enthält keine Geräteknoten. Sysfs enthält hauptsächlich Dateien, die Informationen über Geräte bereitstellen, sowie einige Dateien, die es Prozessen ermöglichen, den Betrieb von Geräten zu steuern. Aber zum größten Teil können Geräte nicht über das verwendet werden, was sysfs bereitstellt.

Nehmen wir zum Beispiel eine Festplatte. Es gibt irgendwo unter /sys/devices ein Verzeichnis dafür , mit einem Pfad, der davon abhängt, wie es mit dem Computer verbunden ist (z. B. /sys/devices/pci0000:00/… für eine Festplatte, die mit einem Controller verbunden ist, der mit dem primären PCI-Bus des Computers verbunden ist). In diesem Verzeichnis finden Sie verschiedene Informationen wie Größe, ob es entfernbar ist, seinen Energiezustand usw. Es gibt auch Unterverzeichnisse für Partitionen. Aber da ist nichts drin, was den Zugriff auf den Inhalt der Festplatte ermöglicht. An anderer Stelle in /sys , gibt es symbolische Links zu dem Verzeichnis, das dieser Festplatte entspricht:in /sys/block , in /sys/class/block , usw. Aber immer noch nichts, um auf den Inhalt der Festplatte zuzugreifen.

In /dev , ist der Eintrag für das Laufwerk eine spezielle Datei – ein Blockgerät. Diese Datei ermöglicht es Prozessen, den Inhalt der Festplatte zu lesen und zu schreiben. (Obwohl das bei einer Festplatte normalerweise nicht passiert; stattdessen wird der Inhalt der Festplatte — oder einer Partition — gemountet, sodass der Kernel auf das Gerät zugreift, Prozesse nicht.)

Gerätedateien ermöglichen einige andere Vorgänge als das Lesen und Schreiben von Inhalten, die über ioctl ausgeführt werden können. Es wäre möglich, alle Informationen und Steuerschnittstellen bereitzustellen, die sysfs über ioctl in der Gerätedatei bereitstellt. Dies wäre jedoch aus mehreren Gründen weniger bequem:

  • Mit separaten Dateien in /sys , Berechtigungen können feingranular festgelegt werden. Mit einer einzigen Datei pro Gerät in /dev , es geht um alles oder nichts.
  • Separate Dateien können von Anwendungen leicht gelesen und geschrieben werden. Sie können einfach cat verwenden oder echo . Mit ioctl ist es viel schwieriger:Es gibt keine Shell-Schnittstelle, oft keine Schnittstelle in anderen Hochsprachen.
  • Bei ioctl muss der Befehl in einer Zahl statt in einem Namen kodiert werden, und das Format der Argumente muss auf binärer Ebene definiert werden. Die Verwendung von Namen und einfachen Textformaten erleichtert das Schreiben von Software.

Umgekehrt wäre es möglich, über eine Datei in sysfs Zugriff auf den Geräteinhalt zu gewähren. Dies würde jedoch zusätzliche Arbeit im Kernel erfordern:sysfs ist hauptsächlich darauf ausgelegt, kleine Dateien und symbolische Links bereitzustellen, und das ohne ioctl Unterstützung, die vorhandene Anwendungen erwarten. Ich glaube nicht, dass die Erweiterung von sysfs zur Unterstützung bestehender Gerätetypen einen wesentlichen Vorteil bringen würde, daher die fortgesetzte Existenz von Gerätedateien.

Verwandte:Linux – Wie finde ich heraus, welche Festplatten im System sind?

Sysfs wird automatisch vom Kernel gefüllt und spiegelt die tatsächlich verfügbaren Geräte in Echtzeit wider. Die Bedeutung einer Datei in sysfs ergibt sich aus ihrem Pfad, der von dem Treiber gewählt wird, der diese Datei bereitstellt. /dev funktioniert anders:Die Bedeutung einer Datei ergibt sich aus dem Typ der Gerätedatei (Block oder Zeichen) und ihrer Major- und Minor-Nummer (das ist ls -l Listen anstelle der Dateigröße für ein Gerät). Traditionell /dev war statisch, mit Gerätedateien, die während der Systeminstallation erstellt wurden; aber das funktioniert nicht so gut, wenn Geräte Hotplugs können, daher der Wunsch nach einem dynamischen /dev die verbundene Geräte in Echtzeit widerspiegelt.

Linux hat mehrere Iterationen eines dynamischen /dev durchlaufen . Linux 2.4 hat devfs, wo der Kernel automatisch Einträge erstellt, um verbundene Geräte widerzuspiegeln. Aber das war nicht so schön, weil es die Benennungs- und Berechtigungsrichtlinien für Geräte fest in den Kernel codierte, sodass es durch das Userland-Programm udev zur Verwaltung der Richtlinien und /dev ersetzt wurde auf einem einfachen tmpfs-Dateisystem (ein In-Memory-Dateisystem ohne besondere Bedeutung für den Kernel). Und dann feierte devfs ein teilweises Comeback mit devtmpfs, einer Instanz von tmpfs, in der Einträge für verfügbare Geräte automatisch vom Kernel erstellt werden, aber udev übernimmt darüber hinaus die gesamte Verwaltung, die es benötigt.


Linux
  1. Linux Dateien und Verzeichnisse löschen

  2. Was ist der Unterschied zwischen einem Linux-Plattformtreiber und einem normalen Gerätetreiber?

  3. Linux-lsblk-Ausgabe

  4. Wie mounte ich ein Gerät unter Linux?

  5. Linux-Bänder, was sind l a und m am Ende von Bandgeräten in dev?

Unter Linux ist alles eine Datei – Teil 1

Linux-Kernel und seine Funktionen

Installieren und konfigurieren Sie Ansible unter Linux

Installieren und Konfigurieren von Jenkins unter Linux

So erkennen und verwalten Sie Geräte unter Linux

Überblick über RAMFS und TMPFS unter Linux