Update 25. März 09: Das Sommersemester 2009 hat begonnen. Da sicherlich einige Teilnehmer der Lesung Raffius hierüber stolpern werden, möchte ich darauf hinweisen, dass ich im Ubuntuusers Wiki eine aktuellere Anleitung als die unten stehende hinterlegt habe.
Es ist jedes Mal ein Grauß, sich ein Cross-Compiling Toolchain zu bauen, vor allem unter einem 64-Bit System, da es hier kaum vorkompilierte Pakete gibt. Die wenigen, die angeboten werden, stammen noch aus Opas Zeiten. Bleibt also nichts anderes übrig, als selbst Hand anzulegen.
1. Die Suche:
Jedesmal wenn ich mir das Toolchain bauen muss, schüre ich Google an, um nach evtl neuen Paketen in Ubuntu zu suchen. Pakete für Ubuntu gibt es keine, was mich allerdings verwundert, gibt es doch mittlerweile eine Mobile Edition von Ubuntu, die extra auf Mobile Geräte zugeschnitten ist. ARM Chips sind dafür bekannt, eine extreme Verbreitung im Bereich der Embedded Devices zu haben. Ein fertiges Cross-Compiling Toolchain wäre hier eigentlich zu erwarten. Google bringt mich dann immer zu ungelösten Beiträgen in englischen und deutschen Foren. Auch eine bekannte Seite eines KoSI-Kollegen wird hier angezeigt: alphapogo.de. Leider stimmen hier die Abhängigkeiten nicht mehr, die Pakete sind ebenfalls recht alt.
Um auf den Punkt zu kommen. Dieses Mal wurde mir ein Thread im Forum von mcuprogramming.com präsentiert, der ein Script enthielt, welches die enstprechenden Quellen automatisch downloaden, kompilieren und konfigurieren können sollte.
2. Vorbereitung:
Die Version 0.1 des Scriptes steht unter der GPLv3. Zum Download muss man sich im Forum registrieren.
Die neuesten Quellen, die zum Erfolg führen, kann man unter folgenden Links beziehen:
- http://gnuarm.org/binutils-2.19.tar.bz2
- http://gnuarm.org/gcc-4.3.2.tar.bz2
- http://gnuarm.org/newlib-1.16.0.tar.gz
- http://gnuarm.org/insight-6.8.tar.bz2
Nach dem Download speichert man die Quellen im Verzeichnis “gnu-arm-installer/src“, zuvor muss man natürlich das tar.gz Archiv des Scriptes entpacken.
Damit das Kompilieren nicht vorzeitig abbricht, sollte man unter Ubuntu Intrepid Ibex den configure Befehlen in der Datei gnu-arm-installer.sh noch die Option –disable-werror mitgeben, sodass aus zum Beispiel folgendem Code …
$SRCDIR/$BINUTILS_DIR/configure --target=arm-elf --prefix=$PREFIX \
--enable-interwork --enable-multilib --with-float=soft \
&& make all install
folgender wird:
$SRCDIR/$BINUTILS_DIR/configure --target=arm-elf --prefix=$PREFIX \
--enable-interwork --enable-multilib --with-float=soft --disable-werror \
&& make all install
eine Erklärung findet man in diesem Ikhaya-Artikel. UPDATE: Die Anpassung ist in der Version 0.2 des Skriptes nicht mehr nötig. Mein Vorschlag wurde netterweise aufgenommen
/UPDATE
Jetzt fehlen noch die Abhängigkeiten:
sudo apt-get install build-essential libgmp3-dev libmpfr-dev texinfo libncurses5-dev
… sollten die wichtigsten sein. Danach bin ich mir nicht mehr ganz sicher aber Danach habe ich mir es einfach gemacht und mit …
sudo apt-get build-dep binutils insight
alles anfallende abgedeckt. Genaues werde ich nochmals in einer frischen Installation nachprüfen.
3. Kompilieren:
Dem Bauen sollte nun eigentlich nichts mehr im Wege stehen:
sh gnu-arm-installer.sh
Das Skript werkelt nun vor sich hin und sollte bei Erfolg ein fertiges Toolchain im Ordner install abspeichern. Die wichtigen ausführbaren Dateien findet man unter install/bin. UPDATE: Während des Kompilierens sollte man die Finger von der globalen PATH Variable lassen. Das Skript verändert diese temporär während der Ausführung. /UPDATE
Viel Spaß beim Assembler Programmieren
UPDATE: Bei Problemen mit dem Simulator bitte diesen Kommentar beachten. /UPDATE