Bevor der Entwickler an die Programmierung eines Treibers gehen kann, müssen einige Voraussetzungen erfüllt sein:
Die Quellen der Kernelversion, für die der Treiber erstellt werden soll, müssen vorhanden sein.
Die Kernelquellen müssen eine passende Konfiguration enthalten (sprich, der Kernel muss konfiguriert sein).
Der Pfad zu den Kernelquellen muss bekannt sein.
Die Programme zum Laden und Entladen von Treibern, insmod und rmmod, müssen in einer aktuellen Version vorliegen.
Kernelquellen. Die Kernelquellen selbst sind notwendig, weil der Treiber verschiedenste Datenstrukturen und Funktionen des Kernels verwendet. Dazu benötigt er die zugehörigen Deklarationen. Falls die Kernelquellen nicht bereits eingespielt sind, findet man selbige entweder beim zugehörigen Distributor (z.B. Debian, SuSE, Redhat oder Mandrake) bzw. distributionsunabhängig direkt unter der URL http://www.kernel.org. Anhang Kernel generieren und installieren erläutert die Installation, die Konfiguration und die Generierung eines Kernels.
Kernelkonfiguration. Sicherlich ein heikler Punkt ist die Abhängigkeit des Treibers von der zugehörigen Kernelkonfiguration. Linux zeichnet sich bekanntermaßen durch eine außergewöhnlich große Skalierbarkeit und Portierbarkeit aus. Die Kehrseite dieser Medaille: Für die Portierung auf unterschiedliche Plattformen benötigt der Compiler unterschiedliche Compileflags. Ein Wissen, über das der einzelne Entwickler normalerweise nicht verfügt, das aber im so genannten Kernel Build System hinterlegt ist. Das Kernel Build System ist eine mit Kernel 2.6 eingeführte Systemkomponente, die den Linux-Kernel inklusive seiner dynamisch ladbaren Module generiert (vgl. Kapitel Kernel Build System). Integriert der Treiberentwickler den zu erstellenden Treiber in das Kernel Build System , fällt ein weiterer Stolperstein weg. Das Kernel Build System erkennt nämlich, ob der Kernel für ein Einprozessorsystem erstellt wird oder ob Unterbrechungen im Kernel (Preemption) zugelassen sind, und erzeugt daraufhin selbständig den dafür erforderlichen Code.
Zum Einklinken in das Kernel Build System ist es notwendig, den Pfad zu den konfigurierten Kernelquellen zu kennen.
Pfade zu den Kernelquellen. Die Kernelquellen finden sich auf einem System unter dem Verzeichnis /lib/modules/<version>/build. Meist ist dies nur ein Link (Verweis) auf den wirklichen Ablageort, nämlich /usr/src/linux-<version> bzw. nur /usr/src/linux.
Programme zum Laden und Entladen von Treibern. Module werden mit Hilfe der Programme insmod und rmmod geladen respektive wieder entladen. Da sich mit Kernel 2.6 der Lade- und Entladevorgang technisch wesentlich geändert haben, sind aktuelle Versionen dieser beiden Programme notwendig. Eine geeignete Version erkennt man an einer Versionsnummer größer 3.0. Die Versionsnummer erfährt der Entwickler durch Aufruf des Kommandos:
root# insmod --version |
Die neuen Programme insmod und rmmod sind in dem Sinn abwärts kompatibel, dass sie die alten Programmversionen nicht ersetzen, sondern dass sie zusätzlich zu diesen installiert werden und als Wrapper-Programme fungieren. Wird dann zum Laden eines Moduls die neue Variante von insmod aufgerufen, stellt diese fest, ob es sich um einen Kernel 2.4 oder früher handelt. Ist dies der Fall, wird die ursprüngliche insmod-Version aufgerufen. Gleiches gilt für rmmod.
Anhang Kernel generieren und installieren beschreibt, wo Sie die aktuellen Programmversionen herunterladen können und wie diese zu installieren sind.
Tabelle 5-1. Checkliste zum Programmierstart [Editors Note: möglicherweise auch als Kasten zu setzen.]
Zurück | Zum Anfang | Weiter |
Einfache Treiber | Nach oben | Den Kernel erweitern |