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

Linux – Wann sollten /dev und /sys für die Userspace-Kernel-Kommunikation verwendet werden?

Ich steige gerade in die Entwicklung von Linux-Treibern ein und habe eine konzeptionelle Frage, die meiner Meinung nach auch anderen Neulingen in der Kernel-Entwicklung helfen wird.

Ich lese das Buch Linux Device Drivers durch und habe bis zu Kap. 3 des Buches. Bisher habe ich das gesehen, indem ich open ausgegeben habe , close und andere Befehle zu Dateien in /dev Ordner kann der Userspace auf Kernelfunktionen zugreifen.

Eine andere Methode zur gemeinsamen Kontrolle erfolgt über Dateien in /sys , wobei aus sys gelesen oder geschrieben wird Dateien können mit dem Treiber kommunizieren.

Ich wollte wissen, was die Anwendungsfälle für jede Methode wären? Sind sie 2 Ansätze für die gleiche Aufgabe? Hat man irgendwelche Einschränkungen gegenüber einem anderen? Kann jemand praktische Beispiele nennen, bei denen das eine gegenüber dem anderen nützlich sein könnte?

Ich habe die anderen Fragen hier gelesen und sie erklären dev und sys . Das ist zwar hilfreich, aber ich wollte etwas mehr darüber wissen, wie sich beide unterscheiden und wie sie verwendet werden sollten.

Akzeptierte Antwort:

Ganz grob:

/dev enthält Geräteknoten, was in früheren Unix-Systemen die einzige Möglichkeit war, mit dem Kernel zu interagieren. Es gibt zwei Arten davon, blockieren Geräte und Charakter Geräte. Die entsprechende API ist darauf ausgerichtet, blockbasierte I/O (eine Art Festplatte) oder zeichenbasierte I/O (z. B. eine serielle Schnittstelle) zu ermöglichen.

/sys (und /proc ) wurden später hinzugefügt, möglicherweise inspiriert vom Plan 9 OS. Sie stellen vollständige Verzeichnisunterbäume bereit, und die Dateieinträge in diesen Unterbäumen enthalten Text, der den internen Zustand des Kernelmoduls beim Lesen beschreibt oder, wenn er geschrieben wird, den internen Zustand festlegt.

Eine typische Anwendung wäre also:

Sie wollen einen Kernel-Treiber für irgendein Speichergerät schreiben? Verwenden Sie ein /dev Knoten für den Zugriff auf das Gerät selbst und /sys (oder /proc )-Einträge, um den Zugriff auf den Speicher zu optimieren.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Bash =~ Regex und Https://regex101.com/?

  3. Wann sollte /dev/random vs. /dev/urandom verwendet werden?

  4. Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

  5. Was sind /dev/zero- und /dev/null-Dateien in Linux

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Wie kann ich die Anzahl und Größe von Linux-Ramdisks (/dev/ram0 - /dev/ram15) ändern?

Wann muss ich #!/bin/bash und wann #!/bin/sh verwenden?