• 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

Faites vos premiers pas avec Buildroot et l’environnement Microlinux

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

Pourquoi générer son propre GNU/Linux ?

Dans les parties précédentes, vous avez utilisé la distribution Raspbian qui est compatible avec l'architecture ARM présente sur les cartes Raspberry. Cette distribution a l'avantage de s'installer rapidement et elle vous fournit un GNU/Linux classique, avec tous les outils nécessaires à l'administration d'un système (gestionnaire de paquets, de nombreuses applications et services...). L'inconvénient de cette distribution est l'impact sur les performances du système obtenu. Tout d'abord, au niveau de l'utilisation du disque, Raspbian nécessite plusieurs Go.

Ensuite, le temps de démarrage ; l'objectif de Raspbian est de fournir un système d'exploitation du type ordinateur personnel. Au démarrage, tous les services classiques sont donc exécutés pour obtenir un système multiutilisateur avec ou sans interface graphique. Enfin, l'impact mémoire ; les applications fournies et les services exécutés sont les versions classiques pour ordinateurs de bureau, et ne sont donc pas optimisés pour l'embarqué (impact mémoire important).

Les principaux composants d'un GNU/Linux embarqué

Un système de GNU/Linux classique que vous installez sur un ordinateur n'a pas les mêmes contraintes qu'une version que l'on installerait sur un système embarqué. Afin de réduire la taille de l'image obtenue, l'empreinte mémoire, et d'accélérer le temps de démarrage du système, plusieurs applications peuvent être intégrées.

La uClibc est une version réduite de la bibliothèque standard C : la glibc. À l'origine, cette bibliothèque a été créée pour le projet uCLinux, afin de concevoir un GNU/Linux minimal pour l'embarqué. Alors que la glibc pèse 200-400 Mo, cette version ne représente que quelques Mo. Évidemment, il n'y a pas de miracle : réduire par 100 la taille d'une librairie a un impact sur ses fonctionnalités, voire ses performances. Ainsi, pour réduire la taille finale du code, certaines fonctions ou les optimisations apportées ont été supprimées dans la uClibc. De ce fait, certaines applications ne sont pas compatibles avec la uClibc et nécessitent l'installation de la glibc.

Busybox
BusyBox

GNU/Linux comprend un ensemble de commandes standard UNIX, telles que ls, rm, touch... ; il y a plus de 200 commandes installées sur une distribution classique. Mises bout à bout, ces commandes ont un impact sur l'espace disque. BusyBox est un programme qui implémente l'ensemble de ces commandes dans un seul exécutable. De plus, BusyBox propose une version allégée des commandes, en ne gérant que les options essentielles. Ces deux astuces permettent encore de réduire la taille de l'image finale.

TinyLogin est une version allégée de la suite gérant l'authentification et les utilisateurs sous GNU/Linux. Tout comme BusyBox, TinyLogin combine en un seul exécutable les différentes commandes de gestion comme adduser, passwd, su, login, etc. Encore une fois, l'objectif est de réduire la taille finale de l'image. Ce projet est maintenant intégré à BusyBox.

Le projet BusyBox fournit aussi une version allégée du système de démarrage de services SYSVinit. Lors du démarrage du système, le noyau se charge, puis exécute la procédure de lancement de services BusyBox init. Ce programme est chargé d'exécuter les scripts de lancement de services stockés dans le répertoire /etc/init.d. Cette version d'init est une version allégée dédiée aux systèmes embarqués, permettant de démarrer un système en quelques secondes.

Quelques exemples de plateformes de génération de systèmes pour l'embarqué

Pour créer un GNU/Linux embarqué, vous avez deux possibilités. Soit vous construisez votre projet "à la main" en téléchargeant les sources des applications, des librairies, du noyau... et vous gérez vous-même les dépendances, ce qui revient à créer un Linux From Scratch ; soit vous utilisez un kit de génération prévu à cet effet. Évidemment, dans ce cours nous allons utiliser la deuxième possibilité.

Commençons par une description des quatre principaux projets qui fournissent un kit de génération.

Open Embedded
Open Embedded

Open Embedded, développé depuis 2003, est un framework pour la construction et la compilation croisée de systèmes, basé sur GNU/Linux. Open Embedded est en soi plus une base pour construire un kit de génération, qu'un kit à part entière. Ce framework est ainsi le système de construction recommandé pour le projet Yocto (qui sera présenté ensuite). Open Embedded s'occupe de la construction de la base d'un système en téléchargeant les sources, créant une chaîne de compilation croisée et en compilant un système de base (noyau, librairies, init...). 

Yocto
Yocto

Yocto est une fondation Linux dont l'objectif est de fournir des outils permettant de construire des systèmes Linux pour l'embarqué, en s'abstrayant du matériel utilisé. Yocto souhaite donc offrir une solution unifiée, en regroupant les différents outils/projets existants. La première version de Yocto date de 2010. Contrairement à Buildroot, Yocto ne fournit pas d'interface "graphique" pour la configuration du système cible : tout se passe via des fichiers de configuration. De ce fait, Yocto est plus difficile à appréhender, mais il offre plus de possibilités avancées pour une approche industrielle.

Buildroot
Buildroot

Buildroot, créé en 2005, est un outil permettant d'automatiser la génération d'un système Linux pour une carte embarquée. Il offre une interface permettant de configurer les principaux éléments de votre système (architecture, noyau, applications à installer), puis il s'occupe de télécharger les sources, générer une chaîne de compilation croisée, compiler et générer le système, et finalement construire une image du disque du système. Buildroot a l'avantage de fournir des configurations de base pour les cartes les plus classiques (Raspberry PI...), ce qui en fait un excellent choix pour débuter.

OpenWRT
OpenWrt

OpenWrt est une distribution Linux pour systèmes embarqués, et vise spécifiquement les routeurs wi-fi. OpenWrt permet de remplacer le système figé que l'on retrouve sur les routeurs, par une version plus avancée offrant la possibilité d'installer des applications supplémentaires. Mais OpenWrt est aussi un framework de construction d'applications pour système embarqué, utilisant le firmware OpenWrt.

Et maintenant ?

Votre objectif est de créer une box domotique avec un Microlinux fonctionnant sur Raspberry PI. Afin de construire votre système, vous allez utiliser un des kits de génération de système. Nous avons le choix entre deux projets, Yocto ou Buildroot. Pour la suite de ce cours, j'ai décidé d'utiliser Buildroot. Pourquoi ? Tout simplement car, même si son interface paraît austère, il offre justement une interface de configuration, ce qui est plus simple pour débuter que d'avoir à éditer des dizaines de fichiers. De plus, Buildroot supporte pleinement les cartes Raspberry PI et l'ensemble des applications dont vous avez besoin.

Passons donc, dans le prochain chapitre, à l'installation et la prise en main de Buildroot.

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