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!