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

Lösung zum Verlassen von Lücken zwischen BootStrap-Rastern

Inhaltsverzeichnis [Siehe ein Beispiel]: [Der urs...

Installationsschritte der Ubuntu 20.04-Doppelpinyin-Eingabemethode

1. Chinesische Eingabemethode einrichten 2. Stell...

HTML 5 Vorschau

<br />Original: http://www.alistapart.com/ar...

So gehen Sie nach der MySQL-Tabellenpartitionierung problemlos online

Inhaltsverzeichnis Zweck der Tabelle Zum Beispiel...

Ein Artikel bringt Ihnen die Vererbung von JS-Funktionen bei

Inhaltsverzeichnis 1. Einleitung: 2. Vererbung de...

HTML-Grundlagen_Allgemeine Tags, allgemeine Tags und Tabellen

Teil 1 HTML <html> – Start-Tag <Kopf>...

Eine detaillierte Einführung in die Linux-Verzeichnisstruktur

Wenn Sie mit dem Erlernen von Linux beginnen, müs...

Zusammenfassung der Methoden zum Bereinigen von Mysql general_log

Methode 1: GLOBAL festlegen general_log = "A...

MySQL-Transaktions-Tutorial Yii2.0 Händler-Auszahlungsfunktion

Vorwort Ich bin ein PHP-Programmierer, der als Pr...