Wird der Linux-Kernel aus den Quellen übersetzt, wo wird als Zielplattform automatisch die ausgewählt, auf der der Compiliervorgang ausgeführt wird. Compiliert man den Kernel auf einer einem normalen PC mit einer modernen Intel CPU, so wird ein x86-64 oder x86-32 Binary erstellt. Möchten wir aber den Kernel auf einem Embedded System mit einem PowerPC oder ARM Prozessor verwenden, so muss die Kernel-Build-Konfiguration entsprechend eingerichtet werden. Dazu ist eine sogenannte Cross-Toolchain notwendig. Dafür kann unter Debian-basierenden Systemen z.B. die Emdebian-Toolchain verwendet werden.
Nachfolgend sind die Befehle aufgelistet, die für einen solchen Cross-Build benötigt werden. In diesem Beispiel wird von der Emdebian Toolchain ausgegangen. Wie diese Cross-Toolchain installiert wird, ist hier zu finden.
make clean
cp /path/to/my/config .config
Wobei .config die bestehende Kernel-Config darstellt, die übernommen werden soll. Häufig ist gibt es ein Makefile-Target, das eine bestehende Konfiguration in einem Verzeichnis (z.B. in arch/powerpc/configs/xxx) kopiert. Dazu muss aber zuerst, wie weiter unten beschrieben, die gewünschte Architektur definiert werden.
Wenn noch keine Kernel-Config vorhanden ist, muss diese erstellt werden. Dabei ist auszuwählen, was alles an Treibern und Subsystemen in den Kernel aufgenommen werden soll. Dies geschieht durch den Aufruf von
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
Ist noch keine Konfiguration vorhanden, kann auch mit der Default-Konfiguration gestartet werden.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig
Häufig wird eine ältere Konfiguration auch für einen neuen Kernel verwendet. Der neue Kernel hat dann neue Optionen.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- oldconfig
Dieser Befehl fragt nur die neuen Optionen ab und speichert das Resultat auch wieder in .config
ab.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
Alternativ können auch vor dem Aufruf von make die notwendigen Variablen definiert werden mit (hier am Beispiel für eine PPC-Architektur)
export ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-
KERNELDIR/arch/arm/boot