11.6.2005

Treiber kompilieren

default

 

Treiber vom Hardwarehersteller

Manche Hardware kommt mit Linuxtreibern, die der Hersteller entwickelt hat, die aber nicht im Linux-Kernel drin sind. Das kann verschiedene Gründe haben. Je nachdem, welches der Grund ist, kann man dem Treiber trauen oder auch nicht.

Treiber sind eine kritische Stelle im Linux-Kernel. Durch schlechte oder fehlerhafte Treiber kann Linux instabil werden. Deshalb sollte man, wenn irgend möglich, nur die Treiber verwenden, die im Kernel enthalten und - sozusagen - von kernel.org abgesegnet sind. Die wurden im Lauf der Zeit auf allen in Frage kommenden Rechnerarchitekturen (nicht nur auf dem PC) getestet.

Übrigens ist auch Microsoft sehr bemüht, schlechte Treiber aus dubiosen Hardwareschmieden von Windows fernzuhalten. Nicht jeder Absturz von Windows ist tatsächlich die Schuld von Microsoft, viele gehen auch auf das Konto von schlechten Hardwaretreibern.

 

Gründe warum der Treiber in Linux fehlt

  • Der Treiber ist neu, aber z.B. in der nächsten Kernelversion enthalten
  • Der Treiber wird in Zusammenarbeit mit kernel.org entwickelt
  • Der Hersteller entwickelt den Treiber als Open-Source-Projekt
  • Der Treiber kommt als Sourcecode
  • Der Treiber kommt als Binärcode mit einem Wrapper im Sourcecode

 

Die nächste Kernelversion enthält den fraglichen Treiber

Dem kann man trauen. Die Entwickler von Linux-Distributionen laufen alle der Zeit mehr oder weniger hinterher, und wenn ein Treiber zu neu ist für die Linuxversion, die man hat, ist das Selbstkompilieren eine Möglichkeit, die entsprechende Hardware doch schon zu verwenden.

 

Treiber in Zusammenarbeit mit kernel.org

Das betrifft z.B. den proprietären Riva-Grafikkartentreiber. Der kommt als Binärcode mit einem Wrapper im Sourcecode. Bei den meisten Leuten läuft er, mir persönlich ist er suspekt. Ich frage mich: Was haben die Burschen zu verbergen? Haben sie kein Patent auf ihre Hardwaretechnik? Haben sie keins bekommen? Oder hat jemand anders das Patent?

 

Treiber als Open-Source-Projekt

Das betrifft z.B. einen Hersteller von Peripheriekarten zur Prozeßsteuerung. Den Sourcecode muß man sich natürlich erstmal ansehen, ob er einleuchtend ist und eine positive Ausstrahlung hat. Aber im Prinzip ist sowas eine gute Sache. Je offener der Sourcecode, umso schneller kann er reifen.

 

Treiber im Sourcecode vom Hersteller

Das betrifft z.B. einige Billighersteller in Taiwan. Den Sourcecode muß man sich noch genauer ansehen als den im vorigen Absatz. Aber besser Sourcecode als Binärkram.

 

Treiber als Binärcode

Finger weg von solcher Hardware. Das betrifft z.B. ISDN-Karten von AVM ("Fritzcard"). Bei den meisten Leuten laufen solche Treiber, bei einigen nicht, andere schimpfen auf Linux und daß es abstürze, genau wie Windows. Solche Treiber sind Dreck. Wenn man versehentlich solche Hardware gekauft hat, sollte man sie bei Ebay reinsetzen, oder vielleicht wieder zu Windows wechseln...

 

Wie man einen Treiber kompiliert

Man braucht

  • die jetzt laufende Kernelversion
  • passende Kernel-Sourcen oder Kernel-Header
  • gcc (den Compiler)
  • den Sourcecode des Treibers

Kernel-Source bzw. Kernel-Header, sowie der gcc, sind als Pakete in den Distributionen enthalten. Man muß nicht das ganze Kernel neu kompilieren, man muß nur dafür sorgen, daß der Compiler die Header-Dateien des Kernels "sehen" kann.

 

Die Kernelversion bekommt man mit

uname -a

Ausgabe sei z.B.

Linux lex 2.4.19 #6 Thu May 19 02:06:33 CEST 2005 i686 athlon i386 GNU/Linux

Also braucht man linux-2.4.19.tar.bz2. Wie und wo man es holt, steht auf der Seite kernel.html

Wenn man dagegen ein Kernel-Image installiert hat, sollte man in seiner Paketverwaltung nachsehen, wie das Paket genau heißt, und dann die passenden Kernel-Header installieren.

Wenn man nicht weiß, ob man ein Kernel-Image installiert hat, dann hat man eins. Die andere Möglichkeit wäre nämlich, daß man das Kernel selbst kompiliert hat, und das wüßte man.

 

Kernel-Source oder Kernel-Header liegen üblicherweise in

/usr/src/...

Man hat dann z.B. folgendes Directory:

/usr/src/kernel-header-2.4.18-5

und außerdem die Quelldatei

/usr/src/rtl8150.c

 

Dann kompiliert man z.B. mit

gccmodule

Das erzeugt z.B. eine Datei

/usr/src/rtl8150.o

 

Man lädt den Treiber mit

modprobe /usr/src/rtl8150

oder man schreibt die Anweisung(en) zum Laden des Treibers in eine Datei in

/etc/rc.boot/meintreiber

oder an einer ähnlichen Stelle, so daß sie beim Booten ausgeführt wird. So eine Datei macht man ausführbar z.B. mit

chmod +x /etc/rc.boot/meintreiber

abatz.de Jörn Abatz - Technische Software Impressum