Configurer et générer un système de fichier Linux avec Buildroot
Ce que permet Buildroot : configurer et générer un système Linux et la toolchain nécessaire pour compiler depuis votre station de travail des programmes pouvant s’exécuter sur ce système, quel que soit l’architecture cible
20/08/2020
Nathanaël Landais
Configurer un système de fichier Linux manuellement peut s’avérer complexe et chronophage. C’est également peu adapté à un usage industriel, pour lequel la reproductibilité et prévisibilité du processus est clé.
Heureusement, il existe des outils fait pour automatiser ce processus, rendant possible de configurer les besoins d’un système une seule fois pour le régénérer ensuite à volonté.
Buildroot est un de ces outils, et c’est celui que nous allons voir aujourd’hui.
Ce qu’il permet : configurer et générer un système Linux et la toolchain nécessaire pour compiler, depuis votre station de travail, des programmes pouvant s’exécuter sur ce système, quelle que soit l’architecture cible (généralement ARM).
Pourquoi Buildroot ?
- Open source (Licence LGPL2)
- Activement maintenu par la communauté
- Simple à configurer, parfaitement adapté pour la plupart des besoins en systèmes embarqués
Prérequis
Buildroot ne fonctionne que sur Linux, la configuration se fera donc sur un système Linux.
Dans cet article, nous utiliserons Ubuntu 20.04, les commandes données en exemple devraient fonctionner pour n’importe quelle distribution basée sur Debian (Ubuntu, etc.). Quoi qu’il en soit, il est possible de configurer Buildroot simplement sur n’importe quelle distribution.
Dans notre exemple, nous allons configurer un système pour architecture ARM exécutant une application Qt, si vous n’avez pas de carte ARM pour tester, vous pouvez au choix l’exécuter avec l’émulateur QEmu ou générer pour une architecture x86 et l’installer dans une machine virtuelle.
Récupérer Buildroot
Pour récupérer Buildroot, il suffit de se rendre sur le site officiel : https://buildroot.org/download.html. Nous allons prendre la dernière version LTS (Long Term Support) qui nous garantit d’être maintenue pendant un an, sans nécessité de passer à une version supérieure pour bénéficier des résolutions de bugs et correctifs de sécurité.
Vous pouvez extraire l’archive ainsi récupérée dans le dossier où vous souhaitez travailler.
Dépendances
Pour générer un système avec Buildroot vous aurez besoins de quelques utilitaires Linux standard. Ils sont listés sur cette page : https://buildroot.org/downloads/manual/manual.html#_buildroot_quick_start
Pour les installer simplement, sur une distribution basé sur Debian (Tel que Ubuntu) :
$ sudo apt install build-essentials perl unzip rsync binutils make python libncurses5-dev
Configurer Buildroot
Avertissement : la configuration de Buildroot ne nécessite pas les privilèges root et vous de devriez pas exécuter les commandes suivante en tant que root.
Nous allons maintenant configurer Buildroot pour générer un système contenant tous les éléments dont nous avons besoin.
Buildroot a plusieurs interfaces de configuration, nous allons utiliser l’interface ncurses pour laquelle vous devriez avoir les dépendances nécessaires si vous avez suivi les instructions précédentes.
Pour ouvrir l’interface de configuration, déplacez-vous dans le dossier de Buildroot et entrez :
$ make nconfig
Pour commencer nous allons configurer Buildroot pour ARM. Allez donc directement dans Target options > Target Architecture et sélectionnez ARM (little endian) dans la liste, tout simplement.
Vous pouvez ensuite revenir en arrière en appuyant sur la touche echap.
Selon la carte sur laquelle vous allez installer ce système, vous pouvez également sélectionner votre variante dans « Target Architecture Variant » pour permettre à Buildroot d’optimiser la génération pour votre architecture.
Une autre catégorie importante, la catégorie Toolchain. Vous pouvez y configurer de nombreuses options pour la toolchain que générera Buildroot.
Parmi eux : la librairie C à utiliser, le support pour certains langages de programmation tel que le C++, la version de GCC à utiliser, et autre !
Si ces options ne vous disent rien, vous pouvez les laissez aux valeurs par défaut pour le moment, vous pourrez toujours changer la configuration de Buildroot plus tard.
Dans notre cas, nous allons cocher « Enable C++ support » et « Enable WCHAR support » qui sont tous deux nécessaires pour installer Qt.
Nous pouvons maintenant passer à un menu important, « Target packages ».
C’est dans ce menu que vous pouvez ajouter à votre système les paquets dont vous avez besoins ainsi que les dépendances de votre application.
Pour notre exemple nous allons aller dans « Graphic libraries and applications » et cocher « Qt5 ».
Buildroot s’assure que l’arbre de dépendance nécessaire à l’installation des paquets que vous sélectionnez soit satisfait.
Lorsque vous avez fini votre configuration, vous pouvez quitter le menu en appuyant sur F9. N’oubliez pas de sauvegarder quand le menu vous le proposera.
Générer le système Linux
Maintenant que tout est configuré vous pouvez générer votre système et sa toolchain en entrant simplement :
$ make
Notez que Buildroot ne supporte la compilation parallélisée qu’à titre expérimental pour le moment, inutile donc d’ajouter d’argument -j
Important : une connexion internet est nécessaire pour la génération, Buildroot va télécharger les paquets dont il a besoin.
Cela va générer tous les éléments nécessaires que vous retrouverez ensuite dans un dossier nommé « output ». La compilation prend quelques minutes, vous pouvez en profiter pour vous préparer un café !
Le mot de la fin
Vous avez désormais tous les outils pour développer et exécuter une application sur votre système embarqué.
Dans notre prochain article, nous verrons comment configurer et compiler le kernel linux pour votre système embarqué.
Vous avez besoin d’aide pour développer votre objet connecté ou système embarqué ?
Nous pouvons gérer tout ou partie du développement de votre logiciel embarqué ! N’hésitez pas à nous contacter, nous serons ravis de pouvoir vous aider !
Stay tuned !