/!\ ACHTUNG! Es besteht Grund zur Annahme, dass diese Anleitung nicht funktioniert, besser gesagt, dass GCC 4.3 fuer uns nicht funktioniert!

Development Toolchain für Ubuntu 8.10 Intrepid Ibex

Die nachfolgende Anleitung habe ich hauptsächlich mit der Absicht geschrieben, die Schritte für die Einrichtung der ARM/AVR Toolchain später nachvollziehen zu können, beispielsweise bei einem Update auf eine neuere Version oder der Installation auf einem anderen Computer. Damit auch andere davon profitieren können, habe ich sie allerdings möglichst ausführlich geschrieben. Die Anleitung bezieht sich auf die Linux Distribution Ubuntu in der Version 8.10 und berücksichtigt Dependencies, welche beim Kompilieren der Toolchain zu Fehlern führen, weil die entsprechenden Pakete bei Ubuntu nicht standardmässig installiert sind. Fehlende Pakete können entweder mit dem grafischen Paket- Manager Synaptic (Toolbar: System/Administration/Synaptic Package Manager) oder über die Shell mittels apt-get installiert werden:

Damit überhaupt Programme für Ubuntu kompiliert werden können, muss das Metapaket build-essential zwingend installiert sein.

Die arm-elf- Toolchain

Zunächst die arm-elf Toolchain: Wir beginnen mit der Einrichtung eines temp- Verzeichnis im eigenen Home- Folder, wo wir anschliesend alle heruntergeladenen Pakete ablegen und kompilieren.

Nun müssen wir die Source- Tarballs für die Toolchain downloaden. Die arm-elf Toolchain besteht aus den folgenden Paketen. Die Versionsnummern sind die aktuellsten zum Zeitpunkt der Erstellung dieses Artikels.

Zum Downloaden verwenden wir wget in der Shell:

Anschliessend entpacken wir die Archive:

Damit wir nachher nicht immer den gesamten Installationspfad und die Ziel- Architektur angeben müssen, erstellen wir uns ein paar Variablen für diesen Zweck. Weil diese allerdings anschliessend keine Gültigkeit für Befehle mit vorangestelltem sudo hätten, arbeiten wir aber hier in einer Root- Shell. Wir erweitern die PATH Variable temporär. Ganz zum Ende dieser Anleitung, wenn alle Toolchains installiert sind, werden wir diese Änderungen noch fix machen.

Zum Kompilieren der Toolchain erstellen wir jetzt passende Build- Verzeichnisse.

Nun gehts los :) Wir beginnen mit den Binutils, welche beispielsweise den Linker enthalten. Das --disable-werror Flag wird benötigt, weil Ubuntu seit 8.10 standardmässig das -Wformat=2 Flag gesetzt hat, um sogenannten Format- String Angriffen vorzubeugen, was in unserem Fall allerdings dazu führen würde, dass der Kompilier- Vorgang abgebrochen wird. Wer es ganz sauber möchte, sollte die entsprechenden Patches verwenden. Einen Hinweis dazu findet man hier: hier

Bei einem frisch installierten Ubuntu kann der Kompiliervorgang mit einer Fehlermeldung abbrechen, die auf ein fehlendes makeinfo hinweist. In diesem Fall muss das Paket texinfo über Synaptic oder apt-get nachinstalliert werden.

Als nächstes kommt GCC dran. Damit der GCC kompiliert werden kann, müssen GMP (Gnu multiple-precision arithmetic library) und MPFR (multiple-precision floating-point computations with correct rounding) inklusive Header Files installiert sein. Pakete, welche zusätzlich zu den Binaries auch die Header Files beinhalten, heissen in Ubuntu [package]-dev. In unserem Fall benötigen wir die Pakete libgmp3-dev (+ libgmpxx4ldbl) sowie libmpfr-dev.

Bevor wir kompilieren, müssen wir allerdings noch zwei kleine Veränderungen an den GCC Source Files vornehmen. Damit können später auch Projekte mit gemischtem ARM- und Thumb- Code übersetzt werden. Zum Editieren verwenden wir als Editor nano.

Wir suchen die folgenden beiden Zeilen...

...und ergänzen diese folgendermassen:

Wir speichern mit Ctrl - o und verlassen nano mit Ctrl - c.

Um GCC vollständig kompilieren zu können, benötigen wir eine bereits kompilierte Newlib. Diese benötigt ihrerseits aber wieder einen kompilierten GCC. Um dieses Henne- Ei- Problem zu lösen, erstellen wir uns zunächst einen Bootstrap- Compiler, der nur die Newlib- Header Files benötigt. Die Option --disable-nls deaktiviert den "native language support". Wer eine deutschsprachige Ubuntu- Version hat und auch die Fehlermeldungen des GCC später in Deutsch möchte, sollte diese Option weglassen. Allerdings kann es dann Probleme geben, wenn man Eclipse verwenden möchte, weil Fehlermeldungen auf Deutsch den internen Parser durcheinanderbringen.

Weiter gehts mit der Newlib. Die Configure- Option --disable-newlib-supplied-syscalls ist sehr wichtig, da die entsprechenden Syscall- Funktionen im NG Code neu definiert werden. Wären diese schon in der Newlib selbst vorhanden, dann würde anschliessend das Kompilieren des NG Source mit einer Fehlermeldung abbrechen oder zumindest Warnungen ausgeben.

Und nun können wir GCC vollständig kompilieren.

Als letztes fehlt in unserer Toolchain noch der Insight Debugger, welcher uns als grafisches Frontend zu gdb später hilfreiche Dienste leisten kann. Damit der Kompiliervorgang funktioniert, müssen die Pakete libx11-dev sowie libncurses5-dev vorhanden sein.

Quellen: Diese Anleitung basiert auf folgenden Websites:

http://www.madox.net/blog/2008/11/26/compiling-a-toolchain-for-arm7-under-ubuntu/

http://triggeredupdates.wordpress.com/2008/11/10/gnuarm-toolchain-unter-ubuntu-810/

Kurz bevor ich mit diesem ersten Teil der Anleitung fertig geworden bin, habe ich dann noch das hier gefunden :\ :) :

http://wiki.ubuntuusers.de/Baustelle/GNUARM

Development/BauDeineEigene/ARMToolchain (last edited 2009-08-04 16:04:20 by NabilSayegh)