dimanche 25 juin 2017

02-Linux Device Drivers on Embedded System (crosstool chain)

Dans la première partie de cette série, on a installé crosstool-ng l'outil qui nous permettra "d'installer" la chaîne de compilation croisée.

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.





Aucun commentaire:

Enregistrer un commentaire