- Electronique Innovante - https://innovelectronique.fr -

Installer une chaîne de cross-compilation pour µP ARM sur une Debian Squeeze (6.0) ou Wheezy (7.0)

De plus en plus de cartes électroniques à bas coût sont disponibles sur le marché de l’embarqué. Dans quasiment tous les cas elles sont équipées d’un coeur ARM [1]. Par exemple, le RaspberryPi [2] (ARM11 : architecture armv6) ou les cartes Olinuxino [3] (ARM9 (armv5) pour la iMX233 et Cortex A8 (armv7) pour la carte A13) utilisent des processeurs ayant un coeur ARM. Suivant le processeur utilisé, celui-ci peut posséder une unité de calcul en virgule flottante. Nous aurons donc à installer une chaîne de cross-compilation qui supporte ou pas l’unité de calcul en virgule flottante. Sur Debian, le projet emdebian [4] propose des cross-compilateurs pour les architectures précédemment cités.

Qu’est-ce que la cross-compilation ?

Je reprend ici la définition de developpez.com [5] :

Il peut arriver, souvent ou rarement selon votre domaine, que vous ayez besoin de compiler un programme pour une plateforme différente de celle qui est utilisée pour le développement. Par exemple, pour créer une application pour un téléphone portable, vous n’allez certainement pas programmer avec votre téléphone. Vous développerez plutôt votre application toujours sur ordinateur mais la compilerez pour le téléphone et non pour votre système. C’est la cross-compilation.

Dans notre cas la machine de développement est un PC sous GNU/Linux Debian 6 ou 7 et la cible est un système embarqué à base de SoC [6] ARM (RaspberryPi ou Olinuxino).

Installer la chaîne de cross-compilation sur votre Debian

Lancez un interpréteur de commandes avec les droits « root » sur votre Debian (généralement « Terminal administrateur »). Il faut tout d’abord rajouter la clé public GnuPG [7] du dépôt emdebian (cela permet de vérifier la signature des paquets que vous téléchargez). Puis éditer le fichier des sources de paquetages pour ajouter le dépôt de la emdebian enfin il faut installer le cross-compilateur à proprement parler. Vous pouvez donc taper les commandes suivantes :

Rajoutez alors la première ligne pour une debian 7 Wheezy OU la deuxième ligne pour une debian 6 Squeeze:

Mettez à jour la liste des paquetages disponibles :

On cherche maintenant les différentes versions du cross-compilateur gcc pour arm:

Si vous désirez installer la chaîne de cross-compilation « classique » (sans support pour l’unité de calculs flottants) tapez par exemple :

Si vous désirez une chaîne qui supporte « l’unité de calculs flottants » (hf : hard float en anglais, actuellement seulement si vous êtes sous debian 7 Wheezy), tapez:

Vérifiez votre installation en tapant le début du compilateur puis la touche TAB deux fois (exemple ci-dessous pour le compilateur g++ classique) :

Il faut ensuite établir les liens symboliques vers le nom du cross-compilateur (ci dessous pour la version classique, pour la version avec support des calculs flottants rajouter ‘hf’ coller à ‘gnueabi’ => ‘gnueabihf’) :

Premier test de la chaîne de cross-compilation

Vous allez compiler le programme suivant:

Vous taperez donc les commandes suivantes:

La dernière commande est intéressante. On a essayé de lancer le binaire « arm-hello » sur une architecture i386 alors que l’on a compilé pour une architecture de type ARM : résultat le binaire ne peut être exécuté !
Pour savoir pour quel architecture un binaire est compilé, vous utilisez la commande ‘file’ (qu’il faut installer si elle n’est pas disponible) :

Il y a deux choses intéressantes à signaler :

Ci-dessous, on regarde la taille du binaire avant et après avoir retiré les informations de debogage avec la commande ‘strip’ :

On passe de 7377 octets à 4244 octets !

Transférer et exécuter le binaire sur la plateforme ARM

Une fois que vous disposez du binaire, il faut le tester sur la plateforme concernée : RaspberryPi ou Olinuxino. Dans les deux cas, il faut connecter la carte à un réseau ethernet : soit en filaire, soit en Wifi. Il est conseillé pour cette partie d’utiliser une des bornes wifi disponible dans la section et de la configurer pour qu’elle distribue des adresses ip par le serveur dhcp intégré. Votre station de développement sera configuré en dhcp, la carte ARM sera configuré en dhcp soit en filaire, soit en wifi : ainsi les deux machines seront sur le même réseau.
Vérifiez la config réseau sur chacune des machines avec la commande ‘ifconfig’. Testez la commande ping entre les deux machines. Enfin pour envoyer un fichier vers la carte ARM depuis votre station de développement:

Dans un autre terminal vous pouvez vous connecter sur la carte ARM par ssh:

Sur la machine ARM, vous pouvez alors lancer l’exécutable :