M2 SETI B4 / MS SE SE758


TP 2 : Buildroot

Introduction

Objectifs

L’objectif de ce deuxième TP est de découvrir l’outil Buildroot.

Pré-requis

Environnement de TP

Nous allons reprendre le répertoire créé lors du précédent TP (remplacez xxx par le chemin du répertoire) :

$ export TPROOT=xxx
$ cd $TPROOT

Buildroot

Présentation

Buildroot est un outil permettant de générer les différents composants nécessaires pour un système embarqué à base de Linux. Il est notamment capable de générer une chaîne de compilation adaptée (compilateur croisé, bibliothèque standard…), un bootloader, un noyau Linux, et de créer un système de fichiers avec différents outils (depuis un petit système basé sur Busybox, jusqu’à un système plus complet basé sur systemd et intégrant des centaines de logiciels comme des serveurs web, etc.).

Téléchargement

Récupérez la version 2020.02.9 (la dernière version avec un support à long terme lors de l’écriture de ce texte) depuis le site de Buildroot : https://buildroot.org/downloads/buildroot-2020.02.9.tar.bz2, puis décompressez-la dans votre répertoire de travail.

$ cd $TPROOT
$ wget https://buildroot.org/downloads/buildroot-2021.02.7.tar.bz2
$ tar xjf buildroot-2021.02.7.tar.bz2
$ cd buildroot-2021.02.7

Configuration

Buildroot fournit des fichiers de configuration par défaut pour de nombreuses cartes. Vous pouvez en obtenir la liste en tapant la commande :

$ make list-defconfigs

Vous pouvez notamment voir que la cible que nous utilisons (QEMU Versatile Express avec Cortex-A9) est supportée. Vous pouvez voir le contenu de sa configuration par défaut :

$ cat configs/qemu_arm_vexpress_defconfig

Nous pourrions utiliser ce fichier fourni par Buildroot (il suffirait alors de faire make qemu_arm_vexpress_defconfig pour l’utiliser), mais nous allons un peu parcourir à la main la configuration à des fins pédagogiques.

Buildroot fournit une interface menuconfig (ressemblant à celle du noyau) pour configurer son fonctionnement. Vous pouvez la lancer avec la commande :

$ make menuconfig

Nous allons parcourir rapidement la configuration afin de l’adapter à notre cas mais également de voir les différentes options qui s’offrent à nous.

Target options

Dans le menu Target options, nous devons configurer l’architecture cible.

Choisissez les valeurs suivantes :

Build options

Ces options permettent de configurer le comportement de Buildroot. Nous n’avons pas de modification à apporter mais regardez néanmoins rapidement les différentes options disponibles.

Toolchain

Le menu Toolchain permet de configurer le cross-compilateur et les outils qui seront utilisés pour la compilation des différents composants logiciels.

La première option Toolchain type permet d’indiquer à Buildroot :

Regardez rapidement les options proposées (notamment par exemple les différentes bibliothèques standard proposées) dans le mode Buildroot toolchain (celui par défaut).

Cependant, la compilation d’une chaîne de compilation est très longue. Nous allons donc, dans le cadre de ce TP, en choisir une existante. Sélectionnez donc External toolchain.

Dans l’option Toolchain, choisissez Arm ARM 2020.4. Si vous ne touchez pas aux autres options, Buildroot va automatiquement télécharger cette chaîne de compilation depuis le site d’ARM et l’installer.

System configuration

Dans System configuration, vous trouverez un certain nombre d’options pour modifier le comportement du système Linux que vous construisez.

La seule modification que nous apporterons est la suivante :

pour indiquer sur quel port série ouvrir une console.

Kernel

Dans le menu Kernel vous trouverez les options contrôlant la compilation d’un noyau Linux par Buildroot.

Nous aurons besoin des options suivantes :

Ces options indiquent à Buildroot que l’on souhaite compiler un noyau Linux, en utilisant le fichier de configuration par défaut vexpress fourni par le noyau, que l’on souhaite également construire un arbre des périphériques et que ce dernier provient du fichier vexpress-v2p-ca9.dts fourni par le noyau.

Target packages

Dans ce menu, vous trouverez la liste des applications à compiler et à installer dans notre système de fichiers. Par défaut, seul BusyBox est sélectionné, et c’est le seul dont nous aurons besoin. Regardez néanmoins rapidement la diversité des paquets proposés par Buildroot.

Filesystem images

Dans ce menu, vous pouvez choisir le format de destination pour l’image du système de fichiers qui sera générée par Buildroot.

Pour simplifier, nous allons faire générer à Buildroot une image initramfs contenant l’intégralité de notre système de fichiers.

Activez donc uniquement les options suivantes :

Plus couramment, Buildroot permet de créer :

Bootloaders

Dans ce menu vous pourrez demander à Buildroot de compiler un bootloader pour votre système (par exemple U-Boot).

Nous n’en aurons pas besoin dans le cadre de ce TP.

Compilation

Les réglages de langue mis en place par certaines distributions (notamment Ubuntu) peuvent perturber le fonctionnement de Buildroot. Assurez-vous de les désactiver, pour le terminal courant, à l’aide des commandes suivantes :

$ unset LANG
$ unset LC_MESSAGES
$ unset LC_ALL
$ unset LANGUAGE
$ export LANG=C

Une fois la configuration terminée et le fichier de configuration enregistré, il n’y a plus qu’à demander à Buildroot de construire les différents composants :

$ make

Si vous voulez conserver une trace de tous les messages dans un fichier pour s’y référer ultérieurement, vous pouvez utiliser tee :

$ make 2>&1 | tee build.log

Une fois tous les composants construits, vous trouverez dans le répertoire output/images :

En fonction des options choisies dans la section Filesystem images, on aurait pu trouver également :

Tests

Nous pouvons donc tester le résultat à l’aide de QEMU :

$ cd ..
$ ./qemu-system-arm -machine vexpress-a9 -nographic \
 -kernel buildroot-2021.02.7/output/images/zImage \
 -dtb buildroot-2021.02.7/output/images/vexpress-v2p-ca9.dtb \
 -initrd buildroot-2021.02.7/output/images/rootfs.cpio.gz

Pour aller plus loin

Vous trouverez la documentation officielle de Buildroot ici : https://buildroot.org/downloads/manual/manual.html.

Bootlin propose des formations avancées sur l’utilisation de Buildroot, dont les supports et les textes des travaux pratiques sont librement téléchargeables sous licence Creative Commons Attribution - Share Alike 3.0.


© Copyright 2020 Guillaume Duc. Le contenu de cette page est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International (à l'exception des exemples de code tirés du noyau Linux et qui sont distribués sous leurs licences d'origine).

Licence
Creative Commons