ARM Cross-Compiler
Löschhinweis:
Dieser Artikel wurde zum Löschen vorgeschlagen.
Bereits im Artikel Cross-Compiler vorhanden --Mtgxyz - Diskussion 17:53, 29. Jan. 2016 (CET)
Wer ein Betriebssystem (oder generell Applikationen) für auf ARM-Prozessoren basierenden Architekturen erstellen will, aber selber nicht auf einer solchen entwickelt, muss sich einen Cross-Compiler erstellen bzw. verwenden. In diesem Artikel wird erklärt, wie ein Cross-Compiler unter Linux für die ARM-Architektur erstellt wird.
Inhaltsverzeichnis
Vorbereitungen
Die Erstellung eines Cross-Compilers für ARM-Architekturen erfolgt anfangs analog zu der Erstellung eines Cross-Compilers für x86-64 Prozessoren: Es müssen die binutils und der gcc in ihrer jeweils aktuellen Version (Stand: 06. August 2012) heruntergeladen werden. Sollen mehr Sprachen als C unterstützt werden, so müssen die entsprechenden Pakete unter [1] heruntergeladen werden.
HINWEIS ab gcc-4.7 hat sich das Target geändert, es heißt nun nicht mehr
arm-unknown-linux-gnu
sondern
arm-unknown-linux-gnueabi
Siehe dazu auch [2].
Es werden nun ein paar Variablen erstellt:
$ export PREFIX=/usr/cross/arm $ export TARGET=arm-unknown-linux-gnueabi
Der Pfad unter PREFIX kann geändert werden, wenn die Cross-Tools an anderer Stelle kompiliert werden sollen.
binutils bauen
Sofern nicht schon geschehen, sollte man jetzt das binutils-Paket entpacken, in diesem Beispiel werden die binutils nach /usr/src/cross-arm-binutils entpackt. Nun sollte ein separates Verzeichnis erstellt werden, in welchem die binutils gebaut werden, in unserem Beispiel ist das /usr/src/binutils-arm. Nun wechselt man in eben dieses Verzeichnis und ruft configure wie folgt auf:
$ ../cross-arm-binutils/configure --target=$TARGET --prefix=$PREFIX
Nach erfolgreichem configure können die binutils nun gebaut werden mittels:
$ make -j4 all $ make install
Hinweis: Da wir schon 2012 haben und die Mehrheit aller PCs mindestens einen Dualcore-Prozessor verbaut hat, kann man den Buildvorgang beschleunigen, indem man die Option -jX make übergibt, wobei X für die Anzahl von Threads pro Core steht, bei einem Dualcore-Prozessor also pro Core zwei Threads.
gcc bauen
Nun geht's an den gcc: Hier gilt auch wieder, sofern nicht schon geschehen, den gcc zu entpacken, in diesem Beispiel nach /usr/src/cross-arm-gcc. Nun sollte, genau wie bei den binutils, ein separates Verzeichnis erstellt werden, in welchem der gcc gebaut wird, in unserem Beispiel ist das /usr/src/gcc-arm. Nun wechselt man in eben dieses Verzeichnis und setzt erst den neuen Pfad zu den ARM-binutils:
$ export PATH=$PATH:$PREFIX/bin
Dann ruft man configure wie folgt auf:
$ ../cross-arm-gcc/gcc-4.7.1/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --without-headers
Nach erfolgreichem configure kann der gcc mittels
$ make -j4 all-gcc $ make install-gcc
gebaut und installiert werden.
LibGCC bauen
Für bestimmte Operationen, z.B. Stack Unwinding, Ganzzahl- und Fließkommaarithmetik und andere Unterstützungsfunktionen benötigt man zusätzlich die LibGCC. Diese kann man zusätzlich erstellen:
$ make all-target-libgcc $ make install-target-libgcc
Fehler beim configure
Eventuell kann es sein, dass configure mit der Fehlermeldung abbricht, dass die Libraries GMP und/oder MPFR sowie MCP nicht installiert seien. Diese müssen dann per Paketverwaltung oder von Hand installiert werden. Hier kann GMP und hier MPFR und hier MCP heruntergeladen werden, falls selbige nicht über die Paketverwaltung der Distribution erhältlich sind. Gebaut werden beide mit dem in Linux bekannten Dreisatz ./configure, make, make install.
Fertig!
Wenn alles geklappt hat, wurde nun ein Cross-Compiler für ARM-Architekturen erstellt. Die Tools befinden sich (im Beispiel dieses Artikels) unter /usr/cross/arm.
Siehe auch
Weblinks
- summon-arm-toolchain – Ein Script zum erstellen eines ARM-Cross-Compilers unter Linux