Hinweise zum virtuellen Dateisystem des Linux-Kernel-Gerätetreibers

Hinweise zum virtuellen Dateisystem des Linux-Kernel-Gerätetreibers
/********************
 * Virtuelles Dateisystem VFS
 ********************/

(1) Einführung in VFS

Als Subsystem des Kernels stellt das virtuelle Dateisystem VFS dateisystembezogene Schnittstellen für Userspace-Programme bereit.

VFS ermöglicht Benutzern die direkte Verwendung von Systemaufrufen wie open(), ohne das spezifische Dateisystem und die tatsächlichen physischen Medien berücksichtigen zu müssen.

VFS bietet ein allgemeines Dateisystemmodell, das alle gängigen Funktionen und Verhaltensweisen von Dateisystemen umfasst, die wir uns vorstellen können. Durch diese Abstraktionsschicht ist es möglich, eine gemeinsame Schnittstelle für den Betrieb aller Arten neuer Dateisysteme zu verwenden.

a. Aufrufmodell

write(): Benutzerbereich -->

sys_write(): VFS -->

So schreiben Sie in das Dateisystem: Dateisystem -->

Physische Medien

(2) Wesentliche Ziele des VFS

VFS verfolgt einen objektorientierten Ansatz und verwendet eine Reihe von Datenstrukturen zur Darstellung allgemeiner Dateiobjekte.

Diese Strukturen enthalten nicht nur Daten, sondern auch Zeiger für die Verarbeitung dieser Daten.

VFS umfasst vier Hauptobjekttypen.

a.Superblock-Objekt super_block

Alle Dateisysteme müssen einen Superblock implementieren. Dabei handelt es sich um ein Objekt, in dem Informationen zu einem bestimmten Dateisystem gespeichert werden. Normalerweise wird dieser in einem bestimmten Sektor der Festplatte gespeichert. Pro Dateisystem gibt es nur einen Superblock.

Bei nicht festplattenbasierten Dateisystemen, wie etwa dem speicherbasierten Dateisystem sysfs, erstellt Linux vor Ort einen Superblock und speichert ihn im Speicher.

Die Struktur des Superblocks ist super_block, der in <linux/fs.h> definiert ist.

Die Methodenstruktur der Superblockoperation ist super_operations, die auch in fs.h definiert ist.

Der Code zum Erstellen, Verwalten und Zerstören von Superblockobjekten befindet sich in /fs/super.c.

Wenn das Dateisystem installiert ist, ruft der Kernel die Funktion alloc_super() auf, um den Superblock des Dateisystems von der Festplatte zu lesen und seine Informationen in das Superblockobjekt im Speicher zu füllen.

b. Indexknotenobjekt-Inode

Das Indexknotenobjekt enthält alle Informationen, die der Kernel zum Bedienen einer Datei oder eines Verzeichnisses benötigt, z. B. Zugriffskontrollberechtigungen, Größe, Eigentümer, Erstellungszeitpunkt der Datei usw.

Das System speichert diese Informationen in einer separaten Datenstruktur, die als Inode bezeichnet wird.

Eine Datei hat nur ein Indexknotenobjekt im Speicher und spezielle Dateien (wie Pipes und Gerätedateien) haben auch ihre entsprechenden Indexknoten.

Die Inode-Struktur ist in <linux/fs.h> definiert und die entsprechende Operationsfunktionsstruktur ist inode_operations

c. Verzeichniseintrag Objekt dentry

Jedes Verzeichniseintragsobjekt stellt einen bestimmten Teil eines Pfads dar, beispielsweise den Pfad /bin/vi, wobei /, bin und vi alle zu Verzeichniseintragsobjekten gehören.

Verzeichniseintragsobjekte haben keine entsprechende Datenträgerstruktur und VFS erstellt sie vor Ort basierend auf dem Pfadnamen in Zeichenfolgenform. Jede Datei entspricht nur einem Dentry-Objekt.

Die Dentry-Struktur ist in <linux/dcache.h> definiert, und die entsprechende Verzeichniseintragsoperationsfunktionsstruktur dentry_operations ist ebenfalls in <linux/dcache.h> definiert.

d. Dateiobjektdatei

Ein Dateiobjekt stellt eine Datei dar, die ein Prozess geöffnet hat. Dieses Objekt wird beim Öffnen erstellt und beim Schließen zerstört.

Da mehrere Prozesse gleichzeitig eine Datei öffnen und verarbeiten können, kann eine Datei mehrere Dateiobjekte im Speicher haben.

Dateiobjekte werden durch die Dateistruktur dargestellt, die in <linux/fs.h> definiert ist. Die Operationsfunktionsstruktur des Dateiobjekts ist file_operations, die in <linux/fs.h> definiert ist.

Dieser Funktionssatz ist sehr wichtig und umfasst die eigentlichen Operationsfunktionen der Datei. Der Benutzerbereich ruft write auf, was schließlich write in file_operations aufruft.

Wir müssen ein Zeichengerät vom Typ char implementieren, d. h. die in file_operations unterstützten Funktionen implementieren.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Hinweise zur Speicherverwaltung von Linux-Kernel-Gerätetreibern
  • Hinweise zur Zeitverwaltung des Linux-Kernel-Gerätetreibers
  • Hinweise zum Zeichengerätetreiber des Linux-Kernel-Gerätetreibers
  • Sortierung der technischen Hinweise zum Linux-Kernel-Gerätetreiber-Kernel-Debugging
  • Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers
  • Hinweise zum Proc-Dateisystem des Linux-Kernel-Gerätetreibers
  • Detaillierte Erklärung zum Schreiben von Linux-Kameratreibern
  • Analyse des Parameterübertragungsprozesses des Treibermoduls in Linux

<<:  Eine kurze Erläuterung verschiedener Möglichkeiten zum Übergeben von Parametern beim React-Routing

>>:  Detailliertes Tutorial zur Installation von mysql5.7.18 auf centos7.3

Artikel empfehlen

Einführung in das Enctype-Attribut des Form-Tags und seine Anwendungsbeispiele

Enctype: Gibt den Kodierungstyp an, der vom Browse...

CSS transparenter Rahmen Hintergrund-Clip-Magie

In diesem Artikel wird hauptsächlich die wunderba...

Allgemeiner Leitfaden zur Sicherheitskonfiguration von Linux/CentOS-Servern

Linux ist ein offenes System. Im Internet sind vi...

Automatisches Laden des Kernelmodul-Overlayfs-Vorgangs beim CentOS-Start

Um Kernelmodule in CentOS automatisch zu laden, k...

Teilen Sie 20 JavaScript-Einzeilencodes

Inhaltsverzeichnis 1. Holen Sie sich den Wert des...

11 Linux-KDE-Anwendungen, die Sie nicht kannten

KDE Abkürzung für Kool Desktop Environment. Eine ...

Tomcat verwendet Thread-Pool zur Verarbeitung gleichzeitiger Remote-Anfragen

Wenn wir verstehen, wie Tomcat gleichzeitige Anfr...

Eine detaillierte Einführung in den netstat-Befehl in Linux

Inhaltsverzeichnis 1. Einleitung 2. Beschreibung ...

ReactHooks Batch-Update-Status und Abrufen von Routenparametern Beispielanalyse

Inhaltsverzeichnis 1. So führen Sie stapelweise U...

Eine kurze Diskussion über die binäre Familie von JS

Inhaltsverzeichnis Überblick Klecks Blob in Aktio...

Einführung in general_log-Protokollwissenspunkte in MySQL

Die folgenden Funktionsdemonstrationen basieren a...

Gegenseitiger Wertetransfer und Aufruf von Vue-Eltern-Kind-Komponenten

Inhaltsverzeichnis 1. Übergeordnetes Element über...