Dans cette partie nous allons générer la chaîne de compilation croisée et la testée.
Génération de la chaîne de compilation croisée
Configuration de Crosstool-ng
Vous rappelez-vous la petite histoire de la première partie (communication entre un francophone et un anglophone) et le lien avec le processeur, il est question de générer les outils qui fonctionneront avec le processeur spécifié.
Le processeur de la carte SAMA5D3 Xplained est est un ARM cortex A5. Il nous faut donc générer la chaîne de compilation pour un processeur ARM Cortex A5.
L'outil ct-ng est installé avec un certain nombre de fichier de configuration prêt à l'emploi. La liste peut être parcourue via la commande ci-dessous
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ct-ng list-samples |
Commande pour afficher les exemples de configuration
En regardant cette image de plus prêt et en remontant la liste depuis le bas, on arrive a un exemple de configuration pour "arm cortex A5".
Arm Cortex A5
Si on se promène davantage dans cette liste on verra celui de Intel 32bits pour Ubuntu et ensuite celui de Intel 64bits.
Intel 32bits pour Ubuntu
Intel 64 bits pour Ubuntu
Configurons donc l'outil avec l'exemple qui nous intéresse.
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ct-ng arm-cortexa5-linux-uclibcgnueabihf |
Commande Cortex A5, début
Commande Cortex A5, fin
Comme c'est conseillé, (voir WARNING) raffinons la configuration.
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ct-ng menuconfig |
ct-ng menuconfig
L’exécution de la commande nous conduira à modifier certaines options
Paths and Misc options
Dans cette option il sera question de modifier le sous menu "Maximum log level to see". Par défaut il est à EXTRA. Étant donne que nous voulons avoir plus d'info de debug, sa valeur sera mise à DEBUG.
Ouverture de menuconfig (fichier .config)
Ouverture du sous menu 'Path and Misc options'
Sélection de 'Maximum log to see'
Entrée dans le sous menu 'maximum log to see'
avec les touches de direction, descendre à l'option qui nous intéresse et valider pour la modifier
Sous menu 'maximum log to see' mis à jour
Vérification de la mise à jour du sous menu 'maximum log to see'
Sortie du menu Path and Misc options
Toolchain options
Dans cette option il sera question de spécifier l'alias pour le compilateur.
Il sera plus pratique d’utiliser arm-linux-gcc que d'utiliser arm-cortexa5-linux-uclibcgnueabihf-gcc qui est plus long à saisir et a plusieurs risques d’erreur. Par défaut cette option est vide.
Sélection du menu 'Toolchain options'
Selection de 'Tuple's alias'
Mise à jour de l'alias
Sortie du sous menu 'Tuple's alias'
C-library
Via cette option nous allons ajouter le support pour IPv6. Ceci est surtout requis par Buildroot. Par défaut cette option n'est pas sélectionnée.
Sélection du menu C-library
Sélection option à modifier
NB: pour la mise a jour, une fois que l'option est sélectionnée, appuyer sur la barre d'espace pour sélectionner ou alors désélectionner
Option mise à jour
C compiler
Au cas où Buildroot ne supporterait pas encore gcc 6, il serait conseillé d’utiliser gcc 5.4.x. Par mesure de prudence et surtout pour des raisons de compatibilité ascendante, je choisirai gcc 5.4.
Sélection du menu C compiler
Sélection du sous-menu gcc version du menu C compiler
Sous-menu gcc version à modifier
Sous-menu gcc version mis à jour
Gcc version modifié et sortie
A ce niveau on peut sauvegarder la mise à jour du fichier .config et lancer ensuite la génération de notre toolchain
Exit menuconfig
Sauvegarde des modifications
Retour à la console
Construction de la toolchain
Une fois la configuration terminée, voici la commande pour construire la chaîne de compilation. NB: En fonction de la puissance de votre station de travail cette étape peut varier de 30 mins à plus de 2h.
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ct-ng build |
execution de la commande build
Fin d’exécution de la commande build
N'ayant pas eu d'erreur on en déduit probablement que tout s'est bien passé.
Avant d'aller plus loin il peut être adéquat de tester la chaîne que nous venons de construire.
Test de la toolchain
Le test de la toolchain se fera en 3 étapes.
Tout d’abord nous allons créer un fichier simple HelloWorld.c, ensuite nous allons le compiler avec la nouvelle chaîne et enfin nous allons vérifier l'exécutable obtenu.
Fichier HelloWorld.c
On va créer un répertoire Test à la racine de '~/Embedded/Linux'
Ce répertoire contiendra plus tard le fichier de test HelloWorld.c
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ mkdir ../../Test |
Création du répertoire Test
Vérifions que le répertoire est bien créé.
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ ls ../../ |
Vérification de la création de Test
Créons à présent le fichier HelloWorld.c
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ gedit ../../Test/HelloWorld.c & |
Création du fichier HelloWorld.c
Contenu du fichier HelloWorld.c
Sauvegardons puis fermons le fichier et passons à la deuxième étape à savoir la compilation.
Compilation
Attention
Souvenez que nous voulons compiler ce fichier non pour l'executer sur notre pc mais sur la plateforme embarquée. pour cela nous utiliserons le compilateur arm-linux-gcc.
Actuellemet le répertoire généré par l'outil ct-ng lors du build n'est pas dans dans notre PATH.
Rajoutons ce répertoire a notre PATH et ensuite compilons notre fichier
| elyham@elyham-GL553VD:~/Embedded/Linux/toolchain-src/crosstool-ng-1.23.0$ export PATH="${PATH}:/home/elyham/x-tools/arm-cortexa5-linux-uclibcgnueabihf/bin/" |
Notons que le répertoire courant a changé.
| elyham@elyham-GL553VD:~/Embedded/Linux/Test$ arm-linux-gcc HelloWorld.c -o hello |
Compilation du fichier test
Test du résultat
En essayant d’exécuter ce fichier sur cette station Linux on a un échec ce qui est normal étant donne que ce n'est pas fait pour cette plateforme
| elyham@elyham-GL553VD:~/Embedded/Linux/Test$ ./hello |
La commande ci-dessous nous montre que notre fichier est bien compile pour une plateforme arm.
| elyham@elyham-GL553VD:~/Embedded/Linux/Test$ file hello |
file hello
Voici ce qui conclut cette deuxième partie. Dans la prochaine partie nous allons faire le tour des outils mis à notre disposition pour travailler sur notre plateforme.
La construction de la toolchain a généré une grande quantité de donnée. Il est conseillé de ne pas les supprimer pour gagner du temps au cas ou l'on voudrait régénérer cette toolchain suite a une mise a jour.




























































