Um für den FriendlyARM selbst Dinge kompilieren zu können, benötigen wir eine so genannte Cross-Compile-Umgebung. Damit ist gemeint, man braucht einen Compiler der für die ARM-Architektur ausführbaren Code erzeugen kann. Zum Glück gibt es diese Umgebung als fertiges Paket, welches man sich auf seine Linux-Maschine herunterladen und installieren kann. Wer seine Arbeitsmaschine nicht mit einer Cross-Compile-Umgebung belasten will, kann sich auch gerne, so wie ich es gemacht habe, eine virtuelle Maschine z. B. in VirtualBox dafür aufsetzen.
Es gibt im Netz gute Dokumentationen1) 2), teils sogar in deutscher Sprache, wie man eine solche Umgebung (Toolchain) einrichtet. Der Vollständigkeit halber, möchte ich das hier auch kurz dokumentieren.
Grundsätzlich hat man die Wahl zwischen der Originalumgebung von FriendlyARM3) (ARM-Linux GCC 4.3.2) oder einer von der Firma Codesoucery4). Ich habe beide benutzt und konnte keinen Unterschied feststellen. Ich habe mich für die Toolchain der Fa. Codesourcery entschieden. Die aktuelle Version kann man hier downloaden. Dazu wählt man als Zielplattform „GNU/Linux“ und auf der folgenden Seite wählt man das „IA32 GNU/Linux TAR“-Archiv zum Download aus.
Nach dem Download entpackt man das Archiv. Als Zielpfad verwende ich das Verzeichnis „bin“ in meinem Heimatverzeichnis, weiterhin passe ich den Namen des entpackten Verzeichnisses von „arm-2010q1“ auf „arm-cc“ an, damit ich später die Pfade nicht ständig ändern muss, falls ich eine neue Version installiere. Die Compilierumgebung liegt also jetzt im Pfad „/home/<benutzername>/bin/arm-cc/“.
~/bin/arm-cc % ls arm-none-linux-gnueabi/ bin/ lib/ libexec/ share/
Damit der Compiler in diesem Pfad auch gefunden wird, müssen wir zwei Umgebungsvariablen anpassen. Wer möchte kann dies in seiner „.bashrc“ Datei hart verdrahten, indem er die folgenden beiden Export-Zeilen dort einbindet. Ich möchte das allerdings nicht und führe die Exports immer vor einem Kompileraufruf manuell durch.
export PATH=$PATH:/home/<benutzername>/arm-cc/bin export CROSS_COMPILE=arm-none-linux-gnueabi-
Anschließend ist zu erkennen, dass alle Befehle vorhanden sind.
% cd ~ % cd bin/arm-cc % ./init.sh % arm<Tabulator-Taste> completing external command arm2hpdl arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-gprof arm-none-linux-gnueabi-size arm-cc arm-none-linux-gnueabi-g++ arm-none-linux-gnueabi-ld arm-none-linux-gnueabi-sprite arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-nm arm-none-linux-gnueabi-strings arm-none-linux-gnueabi-ar arm-none-linux-gnueabi-gcc-4.4.1 arm-none-linux-gnueabi-objcopy arm-none-linux-gnueabi-strip arm-none-linux-gnueabi-as arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-objdump arm-none-linux-gnueabi-c++ arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-ranlib arm-none-linux-gnueabi-c++filt arm-none-linux-gnueabi-gdbtui arm-none-linux-gnueabi-readelf
weiter zu U-Boot installieren…