mardi 13 mai 2008, par patrick Deflandre
Vous voulez développer des applications sur des cibles embarquées à base de coeur ARM. Il vous faut alors utiliser un cross-compilateur. Une solution parmis d’autre est d’utiliser un cross-compilateur GNU.
Cet article vous décrit comment compiler la chaîne de développement.
Tout d’abord, une petite description des choix que j’ai fait au niveau de l’installation du cross compilateur.
Il y a 2 façons d’installer un compilateur arm-elf-gcc :
une installation globale, dans /usr/local/bin
une installation par projet, dans /home/utilisateur/embedded/type_projet
Cette seconde possibilité permet d’avoir plusieurs versions différentes d’un compilateur arm-elf-gcc installées sur un même poste de travail, et de choisir simplement celle sur laquelle on travaille en l’activant par la variable d’environnement $PATH. Cette configuration pouvant être effectuée pour chaque terminal à l’aide d’un petit script.
J’ai fait le choix d’une installation par projet, et le reste de la présentation part de ce principe.
L’arborescence sera donc :
répertoire de travail :
/home/utilisateur/embedded/projets/arm_gcc_4.1.1/
C’est le répertoire de travail spécifique à la version du compilateur. Pour chaque version, il faudra créer un répertoire spécifique et recommencer la procédure de compilation du cross-compilateur.
répertoire dans lequel on va construire le cross-compilateur :
/home/utilisateur/embedded/projets/arm_gcc_4.1.1/build-tools
répertoire dans lequel on va installer le cross-compilateur :
/home/utilisateur/embedded/projets/arm_gcc_4.1.1/tools
répertoire dans lequel on va développer nos applications :
/home/utilisateur/embedded/projets/arm_gcc_4.1.1/sources
La compilation du cross-compilateur arm-elf-gcc nécessite que vous ayez installé les paquets gcc et libncurses5-dev.
Vous pouvez vérifier leur présence par la commande :
apt-cache --installed show gcc libncurses5-dev
Si cette commande ne renvoi pas d’information sur ces paquets, vous pouvez les installer avec les commandes en tant que superutilisateur :
apt-get update
apt-get install gcc libncurses5-dev
Si vous oublier d’installer la librairie libncurses5-dev, vous aurez l’erreur suivante lors de la compilation de gdb :
configure: error: no termcap library found
Comme expliqué au début de l’article, j’ai fait le choix de pouvoir installer plusieurs versions de cross-compilateur arm-elf-gcc sur mon poste de travail.
Il faut pour respecter cette arborescence créez les répertoires suivant :
mkdir -p ~/embedded/arm_gcc_4.1.1/build-tools
mkdir -p ~/embedded/arm_gcc_4.1.1/sources
J’ai développé 2 petits scripts qui facilitent l’installation et l’utilisation du compilateur.
Le premier, devel_arm, à placer et décompresser dans le répertoire racine de l’utilisateur, met à disposition d’un shell les variables d’environnement pour la compilation et l’utilisation du cross-compilateur.
Le second, build_gnuarm_4.1.1, à placer et décompresser dans le répertoire ~/embedded/arm_gcc_4.1.1/build-tools, simplifie la compilation du cross-compilateur.
Les paramêtres à passer à build_gnuarm sont :
fetch — télécharge les sources et les décompresse
erase — efface les constructions précédentes
build — compile ET installe le cross compilateur
install — réinstalle le cross compilateur
Ouvrir un terminal
Exécuter la commande
. devel_arm
On se trouve maintenant dans le répertoire ~/embedded/arm_gcc_4.1.1
Changer de répertoire pour procéder au téléchargement des sources.
cd build-tools
Télécharger les sources :
. build_gnuarm fetch
Compiler ET installer le cross-compilateur :
. build_gnuarm install
Vérification du fonctionnement du compilateur :
cd ~/embedded/arm_gcc_4.1.1/sources
Créer un fichier main.c contenant les lignes suivantes :
int main( void )
{
int i;
for (i=0; i<100000; i++) ;
while(1);
return 1;
}
Et compiler ce fichier avec la commande :
arm-elf-gcc -o main.o main.c
Si vous obtenez un fichier main.o c’est que votre compilateur fonctionne correctement. Félicitation.