:::: MENU ::::

Création d’une custom image pour votre Raspberry Pi

BuildRoot LogoLe système d’exploitation le plus utilisé pour notre cher Raspberry Pi est la distribution Raspbian, développée par la fondation Raspberry Pi, étant basé sur Debian et optimisée pour ce micro ordinateur. L’image embarque par défaut une interface graphique, de nombreuses librairies pré-installées (python, wpa_supplicant …) et les dépôts contenants des dizaines de milliers paquets pré-compilés permettent d’installer rapidement de nouvelles applications sur notre Raspberry Pi.

Néanmoins, pour la réalisation de système embarqué notamment, cette image pourrait s’avérer trop gourmande en ressource et non adaptée aux besoins exprimés. C’est pourquoi nous allons utiliser l’outil buildroot afin de pouvoir compiler notre propre custom image basée sur un Linux classique, et ne contenant que les paquets strictement nécessaires à la réalisation de notre système embarqué.

Tout d’abord on installe les outils nécessaires sur une distribution Linux pour la compilation de l’image. La liste n’est pas forcément exhaustive et il est possible que d’autres paquets vous soient demandés à la compilation en fonction de votre système.

Ensuite on télécharge la dernière version de buildroot disponible à l’adresse suivante :

http://buildroot.uclibc.org/download.html

On décompresse l’archive :

On liste les fichiers de configuration disponible afin de trouver celui qui nous intéresse :

Afin d’avoir un buildroot permettant de compiler une image de Linux pour notre RaspberryPi il faut exécuter la commande :

Normalement si tout s’est bien passé, vous devriez voir quelque chose de ce type apparaitre :

Une fois notre environnement de compilation configuré et prêt à compiler, il nous faut configurer l’image que nous souhaitons obtenir à l’aide de la commande :

Vous devez alors voir un menu de ce type s’afficher :

Menuconfig

Des connaissances en compilation d’image Linux sont recommandées afin d’appréhender toutes les options disponibles. Afin de spécifier les paquets à ajouter à votre image Linux, rendez-vous dans le menu  Target packages. Les paquets sont regroupés par catégorie, à vous d’activer ceux nécessaires à la réalisation de votre système embarqué.

cap3

Certains paquets de grande utilité nécessitent l’activation d’une option nommée : Enable WCHAR support. Vous trouverez cette option dans le menu  Toolchain.

Menu Toolchain

Voici un exemple des paquets disponible dans la section  Network applications.

Network applications disponible

Je vous laisse faire vos propres recherches afin de pouvoir configurer votre image selon vos besoins. N’oubliez pas de valider l’enregistrement du fichier de configuration avant de quitter.

Nous sommes maintenant prêts à lancer la compilation de notre image.

L’option  -j6 permet d’accélérer la compilation en exécutant plusieurs tâches simultanément. Voici ce que dit le manuel à propos de cette option :

Bien sûr tout ceci dépendra du nombre de cœurs processeurs (et de threads) que vous avez à votre disposition. Il est possible que cette option fasse crasher la compilation à un certain moment. Relancer alors le make sans option le temps que la tâche posant problème se termine.

Voilà, si c’est votre première compilation vous pouvez des à présent allez vous chercher un café car celle-ci peut prendre un peu (beaucoup) de temps. L’utilitaire devra télécharger une quantité de données assez importante (Firmware du Raspberry Pi, image de Linux …) donc le temps nécessaire à la compilation dépendra également de votre connexion à internet.

Si la compilation se termine avec succès, vous devriez retrouver quelque chose de semblable dans la console :

En vous rendant dans le dossier output/images de votre répertoire builroot vous devriez retrouver 2 fichiers et un dossier :

  • zImage : Le kernel (noyau) linux de votre image à copier dans la partition de boot.
  • rootfs.tar : La racine de votre distribution contenant tous les fichiers nécessaires. Cette archive devra être décompressée dans votre partition principale.
  • rpi-firmware : Le firmware ainsi que des fichiers de configurations nécessaires au boot de la carte. Le contenu de ce dossier devra lui aussi être copié dans la partition de boot.

Maintenant, vous devez formater votre carte SD (à l’aide de votre utilitaire préféré, GParted par exemple) et créer 2 partitions :

  • Une partition boot d’une taille de 75 Mo en FAT 32
  • Une partition racine (point de montage « / ») prenant le reste de l’espace disponible en EXT 4

Il ne vous reste plus qu’à copier le contenu du dossier rpi-firmware ainsi que le fichier zImage dans votre partition de boot. Pour le rootfs.tar il faudra le décompresser à l’aide de la commande (afin de conserver les droits appliqués aux fichiers) :

Voilà, vous pouvez maintenant démarrer sur votre image custom.

A propos de l'auteur :

Consultant Java/JEE/Android chez eBusiness Information en région parisienne et jeune diplômé Manager des Systèmes d'Information par l'eXia.CESI. Je suis passionné par la Raspberry Pi depuis sa sortie. J'ai réalisé plusieurs systèmes embarqués durant mon stage, utilisés maintenant en entreprise.


6 Comments

  • Répondre Gajh |

    Bonjour,

    Merci pour ce tutoriel mais n’y aurait il pas un probleme dans:
    sudo apt-get install build-essentiel ncurses-dev git
    remplacer essentiel par essential et ncurses-dev par libncurses5-dev?

    Cordialement,
    Gajh

    • Répondre Benoit |

      Bonjour,

      En effet petite coquille pour build-essential que je n’avais pas remarquée. Pour ncurses-dev, c’est possible que le nom du package ai changé. Il faut que je refasse une passe sur le tuto avec une distribution récente afin de faire le test.

      En tout cas merci pour tes retours,

      Benoit

  • Répondre franko |

    SAluu , pour moi j’ai utilisé la configuration deja présente pour raspberry par :
    make raspberrypi_defconfig
    make

    Donc pour les fichiers que j’ai obtenu j’ai crée une partition boot et une partition / : est ce que je dois la nommée / ? merci

    • Répondre Benoit |

      Réponse un peu tardive, mais il me semble qu’il est pas nécessaire de nommer cette partition « / ».

Laissez un commentaire