Die GNU Toolchain unterstütz u.a. auch die neue Cortex-M3 Familie von ARM. Ich möchte hier kurz vorstellen, wie man sich selber die entsprechende Crosscompiler Toolchain baut.
Um eine vollständige Toolchain zu erhalten werden 3 Pakete benötigt:
Zunächst legt man sich ein Verzeichnis an, in dem der gesamte Buildprozess und die Sourcen liegen werden. Bei mir ist dies /home/alios/src/toolchain.
Die Toolchain wird vollständig nach /usr/local/arm-elf installiert. Für ein anderes Verzeichnis einfach den Parameter --prefix= bei den configure Aufrufen entsprechend abändern.
binutils installieren
Eine aktuelle Version der binutils kann hier heruntergeladen werden: ftp://sourceware.org/pub/binutils/snapshots
Die Version sollte im Prinzip egal sein, ich habe Version 2.20.51 gewählt. Im Anschluss werden die Sourcen entpackt, gebaut und installiert.
$ mkdir /home/alios/src/toolchain
$ cd /home/alios/src/toolchain
$ wget ftp://sourceware.org/pub/binutils/snapshots/binutils-2.20.51.tar.bz2
$ tar -jxf binutils-2.20.51.tar.bz2
$ mkdir build-arm-elf
$ mkdir build-arm-elf/binutils
$ cd build-arm-elf/binutils
$ ../../binutils-2.20.51/configure --prefix=/usr/local/arm-elf --target=arm-elf
[ ... configure output ... ]
$ make all
[ ... build output ... ]
$ sudo make install
GCC Teil 1 bauen
Der gcc wird in 2 Schritten gebaut. Zunächst wird der C und der C++ Compiler gebaut. Die libstdc++, die auch zum GCC gehört, kann allerdings erst gebaut werden,
nachdem eine libc installiert wurde (die newlib in diesem Fall). Daher wird der Build Prozess nach einer Weile mit einem Fehler abbrechen – davon nicht irritieren lassen.
Als Version habe ich mich für den aktuellen 4.4 Branch aus dem GCC subversion repository entschieden.
$ cd /home/alios/src/toolchain
$ svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch
$ mkdir build-arm-elf/gcc
$ cd build-arm-elf/gcc
$ ../../gcc-4.4-branch/configure --target=arm-elf --prefix=/usr/local/arm-elf --disable-nls --disable-shared --disable-threads --with-gnu-ld --with-gnu-as --disable-multilib --disable-libssp --disable-libmudflap --disable-libgomp --with-dwarf2 --with-newlib -v --disable-werror --with-cpu=cortex-m3 --with-tune=cortex-m3 --with-mode=thumb --enable-target-optspace --with-float=soft --enable-languages=c,c++
[ ... configure output ... ]
$ make all
[ ... build output ... ]
checking for type equivalent to int8_t... configure: error: no 8-bit type
exit: Illegal number: please
exit: Illegal number: please
gmake[1]: *** [configure-target-libstdc++-v3] Error 1
gmake[1]: Leaving directory `/usr/home/alios/src/toolchain/build-arm-elf/gcc'
$ sudo make install
Nun sollte der GCC installiert sein. Ggf. muss das Verzeichnis bevor es weiter geht noch in den Pfad mit aufgenommen werden ($ export PATH=/usr/local/arm-elf/bin:$PATH ).
Ein Aufruf von $ arm-elf-gcc --version sollte funktionieren.
newlib installieren
Die Newlib ist eine für embedded System optimierte Implementierung der C Standard Bibliothek (libc). Die aktuellste Version erhält man aus dem CVS.
$ cd /home/alios/src/toolchain
$ mkdir newlib-cvs
$ cd newlib-cvs
$ cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login
Als Passwort "anoncvs" eingeben
$ cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib
[ ... auschecken des Sourcecodes ... ]
$ cd ..
$ mkdir build-arm-elf/newlib
$ cd build-arm-elf/newlib
$ ../../newlib-cvs/src/configure --with-newlib --disable-newlib-io-float --disable-newlib-supplied-syscalls --prefix=/usr/local/arm-elf --target=arm-elf
[ ... configure output ... ]
$ make all
[ ... build output ... ]
$ sudo make install
GCC Teil 2 bauen
Nun ist auch die libc installiert und es fehlt nur noch die libstdc++. Dazu wird in das gcc Build-Verzeichniss zurrück gekehrt und der Build Prozess fortegesetzt.
$ cd /home/alios/src/build-arm-elf/gcc
$ make all
[ ... build output ... ]
$ sudo make install
Eine vollständige C/C++ Toolchain für den Cortex-M3 ist nun installiert.
In einem weiteren Artikel erkläre ich wie man OpenOCD mit GDB zum On Chip Debugging einsetzt.

Posts
Amazon Wishlist
Delicious
Ebay
Facebook
FriendFeed
Github
Google Profile
Google Reader
Last.fm
LinkedIn
MySpace
Picasa Web Album
Qype
Twitter
Xing
YouTube
Identi.ca




