5.1. Bevor es losgeht ...

Bevor der Entwickler an die Programmierung eines Treibers gehen kann, müssen einige Voraussetzungen erfüllt sein:

  1. Die Quellen der Kernelversion, für die der Treiber erstellt werden soll, müssen vorhanden sein.

  2. Die Kernelquellen müssen eine passende Konfiguration enthalten (sprich, der Kernel muss konfiguriert sein).

  3. Der Pfad zu den Kernelquellen muss bekannt sein.

  4. 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.]

FragestellungKommentar
Für welche Version soll der Treiber erstellt werden? Insbesondere zu Beginn der Entwicklung sollte man aufgrund der einfacheren Möglichkeiten des Testens auch bei Entwicklung eines Treibers für ein eingebettetes System auf dem Hostrechner bleiben. In diesem Fall benötigt man die Kernelquellen für den gerade laufenden Kernel. Die Versionsnummer des gerade laufenden Kernels lässt sich über das Kommando uname -r herausfinden.
Unter welchem Pfad finden sich die zugehörigen Kernelquellen? Dieser Pfad wird für den Aufruf von make bzw. zur Erstellung eines Makefiles benötigt. Die Kernelquellen befinden sich meist unter /lib/modules/<kernelversion>/build, wobei es sich in vielen Fällen um einen Link (Verweis) auf /usr/src/linux-<version> handelt.
Ist der Kernel konfiguriert? Treiber werden konform zur Konfiguration des Kernels generiert. Um einen Kernel zu konfigurieren, wechselt man in das Verzeichnis, welches die Kernelquellen enthält, und ruft entweder »make menuconfig« oder »make xconfig« auf.
Liegen die Programme insmod und rmmod in einer aktuellen Version vor? Hierzu wird insmod testweise mit der Option --version aufgerufen. Die Version muss größer als 3.0 sein.


Lizenz