Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:linux:linux-kernel_crosscompilieren [2014-10-06 10:02] grafsoftware:linux:linux-kernel_crosscompilieren [2016-03-22 17:07] (aktuell) mgehrig2
Zeile 1: Zeile 1:
 ====== Linux-Kernel crosscompilieren ====== ====== Linux-Kernel crosscompilieren ======
 +
 +<box 38% right green | **Beispiele**>
 +  * [[.:phyCORE-MPC5200B:Kernel_v3_19 | v3.19 für phyCORE-MPC5200B]]
 +  * [[.:phyCORE-MPC5200B:Kernel_v4_4_15RT | v4.1.15-rt17+ (Real-time) für phyCORE-MPC5200B]]
 +</box>
 +
 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. 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.
  
Zeile 6: Zeile 12:
   - gewünschten Kernel von http://kernel.org herunterladen und entpacken   - gewünschten Kernel von http://kernel.org herunterladen und entpacken
   - Konsole öffnen und in den vorher entpackten Kernel-Sourcecode navigieren   - Konsole öffnen und in den vorher entpackten Kernel-Sourcecode navigieren
-  - Im Hauptverzeichnis des Kernels ausführen von: <code>make clean </code> +  - Im Hauptverzeichnis des Kernels ausführen von: <code>make clean </code> 
-  - Falls schon eine Kernel-Config besteht, kann diese übernommen werden und für das nachfolgende kompilieren bereitgestellt werden. <code>$ mv /path/to/my/config .config</code> Wobei //config// die bestehende Kernel-Config darstellt, die übernommen werden soll.\\ 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 aufrufen von <code>make menuconfig</code> +  - Falls schon eine Kernel-Config besteht, kann diese übernommen werden und für das nachfolgende Compilieren bereitgestellt werden. <code>cp /path/to/my/config .config</code> 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 <code>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig</code> Ist noch keine Konfiguration vorhanden, kann auch mit der Default-Konfiguration gestartet werden. <code>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig</code> Häufig wird eine ältere Konfiguration auch für einen neuen Kernel verwendet. Der neue Kernel hat dann neue Optionen. <code>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- oldconfig</code> Dieser Befehl fragt nur die neuen Optionen ab und speichert das Resultat auch wieder in ''.config'' ab. 
-  - Kernel crosscompilieren für die gewünschte Fremdarchitektur und den gewünschten Crosscompiler, zum Beispiel ARM: <code> make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-</code> Alternativ können auch vor dem Aufruf von make die notwendigen Variablen definiert werden mit (hier am Beispiel für eine PPC-Architektur) <code>export ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-</code> +  - Kernel crosscompilieren für die gewünschte Fremdarchitektur und den gewünschten Crosscompiler, zum Beispiel ARM: <code>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-</code> Alternativ können auch vor dem Aufruf von make die notwendigen Variablen definiert werden mit (hier am Beispiel für eine PPC-Architektur) <code>export ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-</code> 
   - Das erstellte Image ist dann anschliessend im Architektur-Verzeichnis als //Image//, //zImage// oder //uImage// zu finden, in diesem Falle unter ARM: <code>KERNELDIR/arch/arm/boot</code>   - Das erstellte Image ist dann anschliessend im Architektur-Verzeichnis als //Image//, //zImage// oder //uImage// zu finden, in diesem Falle unter ARM: <code>KERNELDIR/arch/arm/boot</code>