IE-Concept

Créez votre premier OS pour Raspberry PI B3+ avec Buildroot

Prérequis : Posséder une machine (physique ou virtuelle) sous Linux & Git

Afin de répondre à une problématique particulière de gestion des ressources sur un système limité, nous avons pris en main Buildroot, un outil de création d’image Linux particulièrement adapté aux environnements embarqués. Sa prise en main étant bien moins complexe que son principal concurrent Yocto, il va aussi de soi qu’il s’agit d’un système assez limité pour des demandes trop spécifiques. Cependant, cet outil a l’avantage de pouvoir être mis en place rapidement pour des projets de petites et moyennes envergures.
Cet article va vous présenter une approche très simpliste de création d’image Linux, vous permettant d’avoir une première version d’un système d’exploitation minimal contenant une simple console BusyBox et le programme HTOP.

Dans un premier temps, nous avons besoin d’aller récupérer le répertoire Git de Buildroot et de nous rendre sur la dernière version stable :

				
					git clone git@github.com:buildroot/buildroot.git
cd buildroot
git checkout 2019.02
				
			

Ensuite, nous allons utiliser une image préfabriquée à notre utilisation pour une Raspberry Pi 3. Cela va alors charger un fichier de configuration contenant uniquement le minimum vital à l’image pour démarrer :  

				
					cd buildroot
make raspberrypi3_defconfig
				
			

Une liste des différentes images de base disponibles se trouvent dans le dossier « configs » de notre répertoire de buildroot. 

Afin de configurer plus en détail notre image, nous allons pouvoir utiliser une interface pseudo graphique. Pour cela, il suffit d’entrer la commande suivante :

				
					console.log( 'Code is Poetry' );
				
			

Chaque menu est important dans la configuration, mais ils ne sont pas tous à modifier dans notre cas. Voici un petit tour d’horizon de chaque menu :

configuration target option
  • Target options : On y retrouvera les informations de l’architecture de l’image que nous allons construire ;
  • Build options : Ce menu permet de configurer Buildroot, c’est-à-dire ses miroirs de téléchargements, ses paramètres d’optimisations, l’activation du cache… ;
  • Toolchain : Il s’agit de tous les paramètres de compilation pour les librairies de l’image ;
  • System configuration : On pourra modifier sous ce menu toutes les parties internes au système d’exploitation, c’est-à-dire sa langue par défaut, ses paramètres de configuration d’heure, son nom d’hôte, etc… ;
  • Kernel : Toutes les configurations du kernel se trouverons ici, on pourra notamment définir lequel utiliser, quels patchs appliquer ou encore ajouter notre propre logo de démarrage ;
  • Target packages : Il s’agit du menu où nous allons passer le plus notre temps. C’est ici que nous choisirons les paquets préinstallés au système d’exploitation ;
  • Filesystem images : Dans ce menu, nous définirons les paramètres de la génération de l’image. Il s’agit alors de la taille que doit prendre l’image à l’installation, son système de compression… ;
  • Bootloaders : Nous pouvons ici choisir le chargeur de démarrage pour notre image ;
  • Host utilities : Cette partie permet de sélectionner les différents utilitaires de notre OS. On peut y choisir d’y installer par exemple les utilitaires de gestion de disque « parted » ou de création de fichier compressés « zip » ;
  • Legacy config options : Dans ce menu se trouve toutes les dépendances supprimées de Buildroot, qu’il ne faut donc pas utiliser.

Pour cette démonstration de Buildroot, nous allons simplement modifier des parties simples pour notre mini système d’exploitation : 

  • Dans le menu « System configuration », nous allons modifier le « System hostname » pour « Linux-minimal ». 
  • Dans le menu « System tools » puis encore « System tools », nous allons ajouter « htop » pour pouvoir afficher les ressources utilisées par notre système d’exploitation. 

On sauvegarde notre configuration en quittant l’utilitaire en appuyant plusieurs fois sur la touche « échap » puis sur la touche « Entrée » puis nous allons construire notre image en tapant la commande suivante : 

				
					make
				
			

La création de l’image va prendre un peu de temps, car il faut que Buildroot aille chercher toutes les dépendances dont il a besoin sur Internet, puis qu’il les compile pour notre système.

Après la compilation, vous trouverez l’image générée à l’emplacement suivant : 

./output/images/sdcard.img

En utilisant un utilitaire de flash de carte SD comme balenaEtcher, vous pourrez installer dans la carte micro-SD de votre Raspberry Pi votre système d’exploitation tout juste créé.

Après avoir branché votre mini-ordinateur, vous devriez voir un prompt de commande votre demandant un « login ». Entrer simplement « root » et vous voilà connecté ! 

Votre image minimale est à présent créée et testée ! Nous pouvons alors voir que notre Raspberry n’est pas énormément sollicité. Nous avons donc un système d’exploitation opérationnel mais très peu utile en soi… Cependant, avec Buildroot, ajouter des dépendances n’est pas très compliqué et nous permettra assez rapidement d’avoir un OS simple, léger et que correspond à nos besoins. 

Une fois connecté, nous allons vérifier que notre installation a bien pris notre dépendance à htop en tapant dans la console « htop ». Une interface devrait apparaître, laissant voir les différentes ressources systèmes actuellement utilisées :