Artikel mit ‘Gentoo’ getagged

Kernel Cross-Compiling mit Gentoo

Dienstag, 18. August 2009

Aus aktuellem Anlass, brauche ich eine ältere Version des Kernels (2.6.24) und diese natürlich nicht für mein amd64-Gentoo-System, sondern für ein i686 openSUSE-System, also hinein in die schwarzen Künste und etwas cross-compiling betreiben.

Gentoo als Source-Distribution ist natürlich bestens dafür geeignet und stellt sich als erstaunlich kooperativ heraus, folgende Schritte sind nötig:

  1. emerge -av portage-utils crossdev (erstes dürfte wahrscheinlich schon installiert sein)
  2. crossdev –target $MACHINE-$VENDOR-$KERNEL-$OS (durch die entsprechenden Werte ersetzten, Tabelle forestlen oder im Gentoo Handbuch nachgucken, für meinen Fall: crossdev –target i686-pc-linux-gnu)
  3. Anschließend müsste es einen compiler i686-pc-linux-gnu geben, einfach mal probieren ob der Befehl gefunden wird …

Zum compilieren des Kernels sind jetzt noch folgende Schritte notwendig:

  1. export ARCH=”x86″ (kleiner Tipp: Hier ist die Kernel-Architektur gefragt, die sich je nach Version etwas verändern kann, deshalb einfach mal in $Kernelsource/arch  nachgucken, was die Version gerade so anbietet)
  2. export CROSS_COMPILE=”$YOUR_CROSS_COMPILER_HERE” (also in meinem Fall export CROSS_COMPILE=”i686-pc-linux-gnu”)

(Wer will kann das ganze auch in ein eigens angelegtes script packen und z.b. unter /usr/bin speichern, Vorschlag dazu am Ende)

Und jetzt kann wie gewohnt make menuconfig bzw. einfach nur make aufgerufen werden. Bei mir ist allerdings noch folgender Fehler aufgetreten:

arch/x86/boot/boot.h: Assembler messages:
arch/x86/boot/boot.h:112: Error: bad register name `%dil’
make[1]: *** [arch/x86/boot/video.o] Fehler 1
make: *** [bzImage] Fehler 2

Dies liegt jedoch offenbar nicht am Cross-compiler selbst sondern an der Tatsache, das der Kernel älter als der aktuell laufende Kernel ist, ich wurde auf folgenden git-comitt aufmerksam gemacht, der das Problem behebt.

Zum Schluss noch der Hinweis auf das wiedermal recht ausführliche Gentoo-Handbuch, das unter dem Thema Embedded Devices auch zum Thema CC etwas hergibt.

Beispiel für make-script:

#!/bin/sh
exec make ARCH=”x86″ CROSS_COMPILE=”i686-pc-linux-gnu-” INSTALL_MOD_PATH=”${SYSROOT}” “$@”