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)

