Kernel Module Build Environment unter Debian einrichten

Aus HackerWiki

Contents

Vorwort

Mittlerweile gibt es immer mehr Firmen, die für ihre Hardware Linux-Treiber sogar als Quelltext rausbringen. Will man aber ein zusätzliches Modul kompilieren, müssen entsprechende vorkonfigurierte Kernel-Quelltexte installiert sein, da sich sonst die Installer mit Meldungen wie "No kernel module build environment" beschwert. Hier eine kleine Anleitung, wie man auf einem Debian System eine Umgebung einrichten kann, mit der man zusätzliche Module für seinen Kernel kompilieren kann. Ich gehe dabei davon aus, dass man einen Kernel aus einem offiziellen Debian-Paket benutzt.

Installation der Kernel-Quelltexte

Zuerst einmal benötigen wir die Kernel-Quelltexte fuer den aktuell laufenden Kernel. Welche Version das ist, kann man mit

uname -r

herausbekommen. Wir brauchen wirklich nur die Versionsnummer (also das, was ab dem ersten Bindestrich dort steht, interessiert uns nicht Bsp: Output ist 2.6.16-2-686 dann ist die Version 2.6.16). Das zum Kernel gehörige Source-Paket heisst immer linux-source-<kernelversion>. Dieses installieren wir also mit

apt-get install linux-source-<version>

Danach finden wir unter /usr/src einen Tarball, den wir mit

tar -xjf linux-source-<version>.tar.bz2

entpacken. Das dadurch entstandene Verzeichnis verlinken wir mit

ln -s /usr/src/linux-source-<version> /usr/src/linux

nach /usr/src/linux.

Verlinken der Kernel-Header

Damit wir sicher gehen koennen, dass auch wirklich die richtigen Header fuer diese Version in /usr/include liegen, verlinken wir einfach die des Kernels dorthin. Sofern vorher schon das Paket kernel-headers installiert wurde, deinstallieren wir es einfach mit apt-get oder loeschen sie mit

rm -rf /usr/include/asm /usr/include/asm-generic /usr/include/linux

Je nach Prozessortyp benoetigen wir ein anderes Verzeichnis aus /usr/src/linux/include als /usr/include/asm. Bei einem x86-PC benoetigen wir z.B. /usr/src/linux/include/asm-i386. Wir verlinken die Header auf einem x86-PC also wie folgt:

ln -s /usr/src/linux/include/asm-i386 /usr/src/linux/include/asm
ln -s /usr/src/linux/include/asm /usr/include
ln -s /usr/src/linux/include/asm-generic /usr/include
ln -s /usr/src/linux/include/linux /usr/include

Bei einem 64bit-System müssen auch noch die 64bit-Header verlinkt werden. Dies erreicht man mit den folgenden Befehlen:

rm -rf /usr/include/asm-x86_64
ln -s /usr/src/linux/include/asm-x86_64 /usr/include

Damit werden nun beim Kompilieren garantiert die Header der Kernel-Quelltexte benutzt.

Konfigurieren der Quelltexte

Damit aber Module wirklich problemlos erstellt werden koennen, muessen in den Kernel-Quelltexten die gleichen Konfigurationen gesetzt sein, wie im laufenden Kernel. An diese Konfiguration kommen wir mit

cp /boot/config-`uname -r` /usr/src/linux/.config

Dann installieren wir uns erstmal alles, was man zum Kompilieren so braucht:

apt-get install build-essential

Danach wechseln wir nach /usr/src/linux und setzen die Konfiguration

cd /usr/src/linux
make oldconfig

Zu guter Letzt sollten wir den Kernel noch vorkompilieren (nicht installieren, das ist nicht notwendig)

make all

Und schon haben wir ein funktionierendes Kernel Module Build Environment (oder auf Deutsch: eine Kernel-Modul-Erstellungsumgebung. Klingt aber doof, daher nehme ich immer die englische Bezeichnung).

bitmuncher 15:04, 8. Jun 2006 (CEST)

Persönliche Werkzeuge