Keine Schnittstelle für Treiber?

E

Exzel

Jungspund
Hallo zusammen,

wenn doch Treiber in den Kernel compiliert werden müssen, bzw. als Modul geladen werden, gibt es dann überhaupt eine Schnittstelle zwischen Treibern und Kernel?

Ist dies evtl. schon in Planung?

Interessiert mich einfach.


Gruß
 
Naja... für die Treiberentwicklung kannst du halt die Kernelheaders verwenden. Daraus folgt, dass der Kernel selber quasi eine Schnittstelle ist/beinhaltet.

Grüße, Blender3D
 
Eine Schnittstelle in der Form, wie wir es meinen, existiert nicht. Auch wenn der Kernel modular aufgebaut ist, werden die Module im nachhinein an den Kernel angedockt.
Wie ist das zu verstehen? Wenn Du einen Kernel mal konfigurierst, wirst Du sehr schnell erkennen, dass es, vor allem für Gerätetreiber, 3 Optionen gibt: aktiviert, nicht aktiviert uind Modul. Beim Modul wird eine Schnittstelle fur das Modul bereitgestellt, an die aber nur das entsprechende Modul passt. Und auch nur das von der entsprechenden Kernelversion. Bis zum Kernel 2.4 konnte man die kompilierten Module mit etwas Glück vom Kernel 2.4.12 auf den 2.4.18 übertragen. das geht nun kaum noch.
 
Zuletzt bearbeitet:
Ist da was geplant?

Danke für die Antworten,

ist dann da irgendetwas geplant, um universelle Schnittstellen für die Gerätetreiber anzubieten?

Gruß
 
ist dann da irgendetwas geplant, um universelle Schnittstellen für die Gerätetreiber anzubieten?

Wohl eher nicht. Die Gründe dafür sind afaik:

1. unflexibel, da man dann immer die Kompatibilität (Altlasten) zu der Schnittstelle mitschleppen muss
2. es bringt keine nennenswerten Vorteile, die Treiberentwicklung "im" Kernel funktioniert sehr gut.
 
Aber...

...jedes Update des Kernels führt dazu, dass der Treiber neu einkompiliert werden muss, oder?

Gruß
 
Vielleicht verstehen wir unter dem Begriff "Schnittstelle" nicht alle das gleiche, denn ich hätte gesagt: Selbstverständlich bietet der Kernel seinen Modulen eine Reihe von Schnittstellen an.

Unter dem Link findest Du ein Beispiel für ein "Hallo Welt"-Kernelmodul. Dort wird gezeigt, wie eine Schnittstelle zum Einbinden und Entfernen von Kernelmodulen verwendet wird. Im Quellcode des Moduls werden durch "module_init()" und "module_exit()" dem Kernel die sog. "Funktionszeiger" auf die Funktionen "hello_start" und "hello_end" mitgeteilt. Der Kernel wird dann später beim Einbinden und Entfernen des Moduls durch die Shell-Befehle "insmod" und "rmmod" dazu veranlaßt, diese Funktionen aufzurufen. Ich würde also schon sagen, daß der Kernel eine Schnittstelle zum Einbinden und Entfernen von Modulen bereitstellt.

Viele "Dienste", die von Modulen angeboten werden, sind schon beim Kernel-Design bekannt gewesen. Ein Treiber für ein R/W-Speichermedium wird beispielsweise immer Funktionen zum Speichern und Lesen von Rohdaten anbieten. Diese Treiber beherrschen zwar den Datenaustausch mit der von ihnen unterstützten Hardware, überlassen aber Dienste wie "Cache" und "Dateisystem" komplett irgendwelchen anderen Modulen. Alle diese Module kommunizieren aber untereinander über zuvor festgelegte Schnittstellen.

Wird ein neuer Treiber für eine Netzwerkkarte oder einen Festplatten-Controller geschrieben, kann dieser "sauber" in den Kernel integriert werden, wenn sich dieser eng an die für ihn vorgesehenden Schnittstellen hält.

Problematisch wird es immer dann, wenn Dienste in das System integriert werden sollen, die beim Design des Kernels überhaupt nicht berücksichtigt worden sind. Beispielsweise war das Thema "power management" beim Design der alten Kernel noch kein Thema. Stromsparen wird zunehmend zu einem interessanten Thema und mittlerweile wird es auch von vielen Hardware-Komponenten unterstützt. Hier wurde in letzter Zeit viel geändert, um dem Kernel das Stromsparen beizubringen.

Anmerkung: Wer auf die Idee kommt, selber Kernelprogrammierung zu betreiben, betritt dünnes Eis! Fehler und Abstürze können im schlimmsten Fall zum Totalverlust von Daten führen! Unbedingt zuvor eine Sicherheitskopie von wichtigen Daten anfertigen!
 
Zuletzt bearbeitet:
Vielen Dank!

Mal sehen, wann ich in der Lage bin diesen englischen Text wirklich zu verstehen :)
 

Ähnliche Themen

Grafikkarten unter Linux: Nvidia öffnet seinen Treiber erstmals für Open Source

Grafikkarten mit Linux: Nvidia öffnet seinen Treiber erstmals für Open Source (2. Update)

Grafikkarten mit Linux: Nvidia öffnet seinen Treiber erstmals für Open Source (Update)

Adobe Acrobat Reader Linux

Script pausieren bis Bedingung erfüllt ist

Zurück
Oben