Générer un compilateur pour ARM

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