• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/12/2019

Installez et testez un Linux embarqué

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

GNU/Linux pour architecture ARM

Raspbian est une distribution GNU/Linux basée sur Debian, conçue pour Raspberry PI. Cette distribution est celle qui est fournie par défaut par la fondation Raspberry Pi depuis 2015. Deux versions de Raspbian sont disponibles en téléchargement :

  • la version minimale sans interface graphique,  parfaite pour concevoir un serveur ;

  • la version complète avec l'interface graphique PIXEL, idéale pour créer un mini ordinateur de bureau.

L'intérêt de Raspbian est que son modèle d'administration est le même que sur Debian ; les utilisateurs de cette distribution ne sont donc pas dépaysés. C'est aussi la distribution pour Raspberry PI la plus complète et la plus utilisée. Vous commencerez donc par installer, émuler et tester cette distribution.

L'inconvénient de cette distribution est qu'elle est généraliste, elle n'est donc pas forcement adaptée à un scénario particulier. Dans notre cas, nous souhaitons créer une box domotique, c'est-à-dire un serveur qui va héberger et exécuter essentiellement une application de gestion domotique. Vous verrez donc ensuite comment créer votre propre distribution pour cet objectif.

Émulez une architecture ARM sur une architecture x86

QEMU est un logiciel permettant d'émuler un processeur ou une architecture. En plus d'émuler une architecture x86 sur x86 (virtualisation), il est capable d'émuler une architecture sur une autre architecture différente. Dans notre cas, nous émulerons l'architecture ARM sur x86.

QEMU est multiplateforme, il fonctionne aussi bien sur x86 (32 ou 64 bits), que PPC, Sparc, MIPS et ARM. Mais il est aussi multisystème d'exploitation ; il est ainsi disponible sur GNU/Linux, BSD, OS X ou Microsoft Windows.

Sous GNU/Linux, il est capable d'émuler/virtualiser les plateformes x86, ARM, PowerPC, MIPS, Sparc, etc.

Exécutez du code ARM sur une architecture x86

Avant de se lancer dans l'installation et l'émulation complète d'une distribution GNU/Linux pour architecture ARM, commençons par tenter d'exécuter les exemples "Bonjour le monde" sur notre architecture x86. Pour cela, nous allons utiliser le programme qemu-arm-static qui nous permettra d'exécuter un binaire compilé pour ARM sur notre ordinateur avec un processeur x86.

Commencez par installer le paquetage qemu-user-static qui fournit la commande qemu-arm-static.

sudo apt-get install qemu-user-static

Rendez-vous tout d'abord dans votre dossier contenant vos exemples de code C, puis compilez le fichier hello.c avec la chaîne de compilation croisée officielle pour la Raspberry PI.

cd ~/Development-tools/examples
arm-linux-gnueabihf-gcc -Wall -o hello-arm hello.c 

Tentez maintenant d'exécuter cet exemple avec l'émulateur qemu-arm-static.

qemu-arm-static ./hello-arm

Vous allez obtenir une erreur indiquant qu'un fichier /lib/ld-linux-armhf.so.3 est manquant. En effet, notre exécutable a notamment besoin de cet interpréteur pour être exécuté. 

Test de qemu-arm-static
Test de qemu-arm-static

Vous devez donc préciser où se trouvent les différentes librairies fournies avec la chaîne de compilation croisée. Dans notre cas, ces dépendances sont dans le répertoire ~/Development-tools/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/arm-linux-gnueabihf/sysroot/

Essayez à nouveau en précisant ce répertoire avec l'option -L.

qemu-arm-static -L ~/Development-tools/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/arm-linux-gnueabihf/sysroot/ ./hello-arm

Le programme s'exécute maintenant correctement. qemu-arm-static a pu trouver, dans le dossier précisé, l'ensemble des librairies chargées par notre programme.

Vous pouvez maintenant faire le même test en compilant l'exécutable de manière statique, c'est-à-dire sans le lier à d'autres librairies. Pour cela, ajoutez l'option -static lors de la compilation. Puis exécutez ce nouveau programme.

arm-linux-gnueabihf-gcc -Wall -o hello-arm-static hello.c -static
qemu-arm-static ./hello-arm-static

Désormais, le programme s'exécute correctement sans la nécessité de préciser le répertoire où se trouvent les librairies fournies avec la chaîne de compilation croisée.

Comparaison de la taille de hello-arm et hello-arm-static
Comparaison de la taille de hello-arm et hello-arm-static

Testez dans votre environnement chroot

Vous allez maintenant effectuer les mêmes tests dans votre environnement de compilation croisée chroot. Pour cela, commencez par installer le paquetage qemu-user-static après être entré dans votre environnement.

cd ~/Development-tools/
sudo chroot stretch-crossdev
apt-get install qemu-user-static
cd /root

Vous pouvez ensuite exécuter la version ARM 32 bits.

qemu-arm-static -L /usr/arm-linux-gnueabihf ./hello-arm32

Ou la version 64 bits.

qemu-aarch64-static -L /usr/aarch64-linux-gnu ./hello-arm64

Finalement, vous pouvez sortir de votre environnement.

exit

Exemple de certificat de réussite
Exemple de certificat de réussite