Pour développer des applications ou même pour générer un nouveau kernel pour ma carte CPU TS7200 ou TS7800, il me faut un compilateur. J’ai choisi pour le générer crosstool-ng.
crosstool-ng sert à construire des ToolChains. Les Toolchains (ou chaines de compilation) sont un élément essentiel dans un projet de développement logiciel. Elle servent à compiler, assembler et lier le code qui est en cours d’élaboration et qui sera exécuté par le processeur.
crosstool-ng
On télécharge crosstool-ng depuis : http://crosstool-ng.org/
J’ai choisi la dernière version lorsque au moment ou j’ai générer mon compilateur. C’était la version http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.5.2.tar.bz2. La première chose à faire est d’extraire ce fichier dans un répertoire ou l’on veut générer l’outils.
$> cd ~/Projet
$> tar xjvz ~/Download/crosstool-ng-1.5.2.tar.bz2
$> cd crosstool-ng-1.5.2
Ensuite, on indique l’endroit ou l’on veut que crosstool-ng soit installé.
$> ./configure --prefix=/opt/crosstool-ng
Puis,
$> make
$> sudo make install
Enfin, on modifie le PATH pour avoir le répertoire « bin » dans la recherche des exécutables.
Le programme qui a été généré s’appelle {{ct-ng}}.
$> export PATH="${PATH}:/opt/crosstool-ng/bin"
Le compilateur arm-unknown-linux-gnueabi
J’utilise donc crosstool-ng pour générer un compilateur ARM pour ma cible TS7x00
Avec ct-ng, on a à disposition plusieurs exemples de configuration. On connait leur nom à l’aide de la commande
$> ct-ng help
On obtient une liste d’exemple:
- alphaev56-unknown-linux-gnu
- arm-cortex_a8-linux-gnueabi
- arm-iphone-linux-gnueabi
- arm-unknown-eabi
- arm-unknown-elf
- arm-unknown-linux-gnu
- arm-unknown-linux-gnueabi
- arm-unknown-linux-uclibc
- arm-unknown-linux-uclibcgnueabi
- armeb-unknown-eabi
- armeb-unknown-linux-gnu
- armeb-unknown-linux-gnueabi
- armeb-unknown-linux-uclibc
- armeb-unknown-linux-uclibcgnueabi
- avr32-unknown-none
- i586-geode-linux-uclibc
- i686-nptl-linux-gnu
- ia64-unknown-linux-gnu
- mingw32,i686-none-linux-gnu
- mips-ar2315-linux-gnu
- mips-unknown-elf
- mips-unknown-linux-uclibc
- mipsel-unknown-linux-gnu
- powerpc-405-linux-gnu
- powerpc-860-linux-gnu
- powerpc-e500v2-linux-gnuspe
- powerpc-unknown-linux-gnu
- powerpc-unknown-linux-uclibc
- powerpc-unknown_nofpu-linux-gnu
- powerpc64-unknown-linux-gnu
- sh4-unknown-linux-gnu
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-uclibc
Je choisis arm-unknown-linux-gnueabi
$> ct-ng arm-unknown-linux-gnueabi
Puis je configure ct-ng
$> ct-ng menuconfig
Voici les modifications que j’ai fait dans la configuration standard.
- Le répertoire ou je veux mettre le compilateur.
- Le type d’architecture,
- Le processeur
- Non au debugger sur la cible
- Pas de Fortran
- Pas de Java
Paths and misc options --->
Prefix directory : {{/opt/x-toolx/${CT_TARGET} }}
Target options --->
Architecture level : {{armv4t}}
Emit assembly for CPU : {{arm920t}}
Tune for CPU : {{arm920t}}
C Compiler --->
[ ] Fortran
[ ] Java
Debug facilities --->
[*] gdb --->
[ ] Native gdb
Enfin, je lance la compilation du compilateur 😉
$> ct-ng build
Et voila, on peut maintenant utiliser tous les outils se trouvant sous /opt/x-toolx/arm-unknown-linux-gnueabi/bin/ .On peut par exemple compiler le fichier lcdmesg.c comme ca :
/opt/x-toolx/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc lcdmesg.c -o lcdmesg