Heim > System-Tutorial > LINUX > Hauptteil

Detaillierte Erläuterung des Linux-Gerätemodells (1)_Grundlegende Konzepte

WBOY
Freigeben: 2024-02-15 15:54:02
nach vorne
1186 Leute haben es durchsucht

1. Einführung

Im Artikel „Die Gesamtarchitektur des Linux-Kernels“ erwähnte Wowo, dass der Linux-Kernel fast alle Hardwaregeräte mit unterschiedlichen Funktionen auf der Welt unterstützt, was auch ein Vorteil von Linux ist. Dies führt jedoch auch dazu, dass die Hälfte des Codes im Linux-Kernel aus Gerätetreibern besteht. Mit der schnellen Aktualisierung von Hardwaregeräten wächst auch die Menge des Gerätetreibercodes rapide. Meiner Meinung nach zerstört dieses Phänomen das Konzept „Einfachheit ist schön“ und macht den Linux-Kernel sehr aufgebläht, chaotisch und schwer zu warten. Wowo versteht jedoch auch, dass dies nicht die Schuld von Linux ist, da Linux ein Makrokernel ist und sich der Gerätevielfalt stellen und entsprechende Treiber implementieren muss.

Um die Komplexität der Linux-Treiberentwicklung aufgrund der Gerätevielfalt zu reduzieren und Funktionen wie Geräte-Hot-Plugging und Energieverwaltung zu implementieren, führt der Linux-Kernel das Konzept des Gerätemodells (auch Treibermodell genannt) ein. Das Gerätemodell klassifiziert und fasst Hardwaregeräte zusammen und abstrahiert dann eine Reihe von Standarddatenstrukturen und -schnittstellen. Auf diese Weise wird die Treiberentwicklung unkompliziert und erfordert lediglich das Ausfüllen und Implementieren der vom Kernel angegebenen Datenstrukturen.

Dieser Artikel beginnt mit dem Grundkonzept des Gerätemodells und erläutert schrittweise die Implementierung und Verwendung des Linux-Gerätemodells durch die Analyse des entsprechenden Kernelcodes.

2. Grundkonzepte des Linux-Gerätemodells

2.1 Konzepte von Bus, Klasse, Gerät und Gerätetreiber

Die folgende Abbildung ist ein Beispiel einer gängigen Hardware-Topologie für eingebettete Systeme:
Detaillierte Erläuterung des Linux-Gerätemodells (1)_Grundlegende Konzepte

Die Hardware-Topologie beschreibt drei der vier wichtigen Konzepte im Linux-Gerätemodell: Bus, Klasse und Gerät (das vierte ist der Gerätetreiber, der später besprochen wird).

Bus: Linux glaubt (Sie können sich auf die Kommentare von struct bus_type in include/linux/device.h beziehen), dass der Bus ein Kanal für den Informationsaustausch zwischen der CPU und einem oder mehreren Geräten ist. Um die Abstraktion des Gerätemodells zu erleichtern, sollten alle Geräte mit dem Bus verbunden sein (sei es der CPU-interne Bus, ein virtueller Bus oder ein „Plattformbus“).

Klasse: Im Linux-Gerätemodell ist das Konzept der Klasse dem der objektorientierten Programmierung sehr ähnlich. Es sammelt hauptsächlich Geräte mit ähnlichen Funktionen oder Attributen, sodass eine Reihe von Geräten abstrahiert werden kann, die in mehreren Anwendungen verwendet werden können . Von Geräten gemeinsam genutzte Datenstrukturen und Schnittstellenfunktionen. Daher müssen Treiber, die zu Geräten derselben Klasse gehören, diese öffentlichen Ressourcen nicht mehr wiederholt definieren und können direkt von der Klasse erben.

Gerät: Abstrahiert alle Hardwaregeräte im System und beschreibt deren Namen, Attribute, untergeordneten Bus, untergeordnete Klasse und andere Informationen.

Gerätetreiber: Das Linux-Gerätemodell verwendet Driver, um den Treiber des Hardwaregeräts zu abstrahieren, einschließlich Schnittstellenimplementierungen im Zusammenhang mit der Geräteinitialisierung und Energieverwaltung. Die Treiberentwicklung im Linux-Kernel dreht sich grundsätzlich um diese Abstraktion (Implementierung der spezifizierten Schnittstellenfunktionen).

Hinweis: Was ist Platform Bus?
Es gibt eine Art von Geräten in Computern, die über ihre jeweiligen Gerätecontroller direkt mit der CPU verbunden sind und auf die die CPU durch regelmäßige Adressierungsvorgänge zugreifen kann (oder auf ihre Controller zugreifen kann). Bei dieser Verbindungsart handelt es sich nicht um eine Busverbindung im herkömmlichen Sinne. Da das Gerätemodell jedoch universell sein sollte, erstellt Linux einen fiktiven Plattformbus, mit dem sich diese Geräte verbinden können.

2.2 Die Kernidee des Gerätemodells

Die Kernidee des Linux-Gerätemodells ist (mit xxx Mitteln den Zweck von xxx zu erreichen):

1. Verwenden Sie zwei Datenstrukturen, Gerät (Strukturgerät) und Gerätetreiber (Strukturgerät_Treiber), um das Hardwaregerät aus den beiden Perspektiven „Wofür wird es verwendet“ und „Wie wird es verwendet“ zu beschreiben? Dies vereinheitlicht das Format zum Schreiben von Gerätetreibern und ändert die Treiberentwicklung von Aufsatzfragen zu Lückentexten, wodurch die Entwicklung von Gerätetreibern vereinfacht wird.

2. Verwenden Sie außerdem die beiden Datenstrukturen „Gerät“ und „Gerätetreiber“, um Plug-and-Play (Hot-Swapping) von Hardwaregeräten zu realisieren.
Solange im Linux-Kernel jedes Gerät und jeder Gerätetreiber denselben Namen haben, führt der Kernel die Initialisierungsfunktion (Probe) in der Gerätetreiberstruktur aus, die das Gerät initialisiert und verfügbar macht.
Bei den meisten Hot-Swap-fähigen Geräten sind die Gerätetreiber immer im Kernel vorhanden. Wenn das Gerät nicht angeschlossen ist, ist seine Gerätestruktur nicht vorhanden, sodass sein Treiber keine Initialisierungsvorgänge durchführt. Wenn das Gerät eingefügt wird, erstellt der Kernel eine Gerätestruktur (mit demselben Namen wie Driver), die die Ausführung von Driver auslöst. Das ist das Plug-and-Play-Konzept.

3. Lösen Sie die Abhängigkeiten zwischen Geräten über die Baumstruktur vom Typ „Bus–>Gerät“ (siehe Legende in Kapitel 2.1). Diese Abhängigkeit ist besonders wichtig bei Prozessen wie Ein- und Ausschalten, Energieverwaltung usw.
Stellen Sie sich vor, dass ein Gerät an einen Bus angeschlossen ist. Um das Gerät zu starten, muss zuerst der Bus gestartet werden, an dem es angeschlossen ist. Wenn es viele Geräte im System gibt und die Abhängigkeiten sehr komplex sind, können offensichtlich weder der Kernel noch die Treiberentwickler diese Beziehung aufrechterhalten.
Die Baumstruktur im Gerätemodell kann diese Abhängigkeit automatisch verarbeiten. Vor dem Starten eines Geräts prüft der Kernel, ob das Gerät von anderen Geräten oder Bussen abhängig ist. Wenn nicht, werden diese zuerst gestartet, bis die Bedingungen für den Start des Geräts erfüllt sind getroffen. Was Treiberentwickler tun müssen, ist, den Kernel beim Schreiben eines Gerätetreibers über die Abhängigkeiten des Geräts zu informieren.

4. Verwenden Sie die Klassenstruktur und führen Sie objektorientierte Konzepte in das Gerätemodell ein, wodurch gemeinsame Funktionen weitestgehend abstrahiert, Doppelarbeit im Treiberentwicklungsprozess reduziert und die Arbeitsbelastung verringert werden können.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Linux-Gerätemodells (1)_Grundlegende Konzepte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:lxlinux.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!