• 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

Testez l’image obtenue et comparez avec l’image précédente

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

Vous venez de générer une image d'un GNU/Linux minimal avec Buildroot. Dans cette partie, vous allez tester cette image avec QEMU et vérifier que votre "Bonjour le monde" cross-compilé précédemment fonctionne sur ce système.

Testez l'image avec QEMU

Rendez-vous dans le dossier contenant l'image que vous venez de générer, et exécutez cette image avec QEMU :

cd buildroot-qemu-rpi
qemu-system-arm -kernel ../qemu-rpi-kernel/kernel-qemu-4.9.59-stretch \
                -cpu arm1176 \
                -m 256 \
                -M versatilepb \
                -dtb ../qemu-rpi-kernel/versatile-pb.dtb \
                -no-reboot \
                -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
                -net nic -net user,hostfwd=tcp::5022-:22 \
                -drive file=output/images/sdcard.img,format=raw \
                -nographic

Vous utilisez pour ce test un processeur ARM1176 afin d'émuler une Raspberry PI 1. Le système que vous avez généré est contenu dans l'image de la carte SD sdcard.img que vous avez passée en paramètre.

Lorsque votre système a terminé son démarrage, vous pouvez vous authentifier en tant que root. Vérifiez ensuite l'empreinte mémoire de votre GNU/Linux à l'aide de la commande free -m, et l'empreinte disque avec la commande df -h :

Image générée pour Raspberry PI 1
Image générée pour Raspberry PI 1

Notez que l'empreinte mémoire est relativement faible (7 Mo dans mon cas), mais cette image utilise plus d'espace disque que celle que vous aviez générée pour AARCH64. Ceci est dû au fait que vous utilisez la glibc pour ce test (dû à l'utilisation de la chaîne de cross-compilation fournie pour Raspberry PI) et non la uClibc. Mais avec 55,5 Mo d'espace utilisé, vous êtes encore en deçà d'une image Raspbian minimale. 

Vous pouvez maintenant éteindre votre machine :

halt

Transférez un fichier sur l'image de la carte SD

Vous aviez cross-compilé, dans la première partie, un exemple de code C permettant d'afficher "Bonjour le monde". Vérifions que ce code fonctionne sur notre machine construite avec Buildroot, comme lors de nos test avec Raspbian. Vous avez deux possibilités pour transférer le binaire hello-arm, soit en le copiant par réseau avec la commande scp, soit en le copiant sur la carte SD. Comme vous avez déjà testé la première solution, voyons la seconde.

Le fichier sdcard.img contient l'image d'une carte SD contenant 2 partitions. Afin d'être capable de monter ces partitions dans des dossiers, il faut que le système associe des périphériques à ces partitions. Cela revient à insérer virtuellement la carte SD dans un lecteur SD.  Pour cela, utilisez la commande kpartx qui permet d'associer des périphériques virtuels à des partitions contenues dans une image disque. Installez tout d'abord cette commande :  

sudo apt-get install kpartx multipath-tools

Utilisez kpartx pour créer des périphériques associés à chaque partition de l'image :

sudo kpartx -a -v /home/user/Development-tools/buildroot-qemu-rpi/output/images/sdcard.img

Créez deux répertoires dans /mnt, un pour la première partition (en FAT32) et un pour la seconde (le rootfs en EXT4) :

sudo mkdir /mnt/boot/ /mnt/system/

Montez ensuite les deux périphériques créés par kpartx dans ces deux répertoires :

sudo mount -o loop /dev/mapper/loop0p1 /mnt/boot/
sudo mount -o loop /dev/mapper/loop0p2 /mnt/system/

Vous pouvez désormais copier le binaire hello-arm dans le dossier /mnt/system/root/, ce qui permettra de le retrouver dans le répertoire personnel de root lorsque le système aura démarré :

sudo cp ~/Development-tools/examples/hello-arm /mnt/system/root/

Passons maintenant à l'éjection virtuelle de la carte SD. Pour cela, démontez les répertoires, puis détruisez les périphériques créés par kpartx. Finalement avec la commande losetup, éjectez le disque :

sudo umount /mnt/boot /mnt/system
sudo kpartx -d /dev/loop0
sudo losetup -d /dev/loop0

Vous devez obtenir ceci :

Copie d'un fichier sur la carte SD
Copie d'un fichier sur la carte SD

Exécution de "Bonjour le monde"

Maintenant que le binaire a été copié sur la carte SD, vous pouvez démarrer l'image avec la commande précédente et vous connecter en tant que root.

Vérifiez ensuite que le binaire fonctionne en l'exécutant :

./hello-arm

Et vous retrouverez votre "Bonjour le monde" fonctionnel :

Test de bonjour le monde
Test de bonjour le monde

Vous venez de construire et tester votre premier GNU/Linux pour l'embarqué sur une Raspberry PI. Passons maintenant à un exemple d'utilisation concrète, avec la construction d'une box domotique.

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