Buildroot est un outil de construction de systèmes GNU/Linux embarqués. Par rapport à des solutions comme OpenEmbedded, Buildroot est beaucoup plus simple et rapide à prendre en main, et convient parfaitement pour un grand nombre de systèmes embarqués, au nombre de composants logiciels limité. Il suffit, par exemple, de quelques minutes pour générer un système GNU/Linux minimal contenant Busybox et quelques composants logiciels supplémentaires. Buildroot prend en charge toute la problématique de compilation croisée : génération de la chaîne de compilation croisée, compilation de toutes les bibliothèques et applications, création de l'image du système de fichiers racine, configuration et compilation du chargeur de démarrage et du noyau. Il est également possible d'utiliser des chaînes de compilation croisée préexistantes.
Depuis la dernière dépêche LinuxFr.org concernant la sortie de Buildroot 2010.08, deux nouvelles versions sont sorties : 2010.11 et hier 2011.02. Nous proposons de faire le point sur les nouveautés de ces deux versions dans la seconde partie de l'article.
Sommaire
Buildroot 2010.11
Back-end Crosstool-NG. Jusqu'ici, Buildroot pouvait soit compiler une chaîne de compilation croisée basée sur la bibliothèque C µClibc, soit réutiliser une chaîne de compilation croisée préexistante. Le nouveau back-end Crosstool-NG permet de confier à Crosstool-NG le soin de générer la chaîne de compilation croisée. Développé et maintenu par le français Yann E. Morin (que l'on retrouve régulièrement dans les trolls Wdiscussions qui animent LinuxFr.org), Crosstool-NG est un outil pour générer des chaînes de compilation croisée, avec de nombreuses options de configuration. Il supporte notamment les bibliothèques C glibc, µClibc et eglibc. À terme, il est probable que Buildroot ne soit plus responsable de générer la chaîne de compilation croisée, et qu'il confie ce travail à Crosstool-NG. Le back-end, implémenté par Yann E. Morin lui-même, permet d'intégrer de manière complètement transparente Crosstool-NG à Buildroot : l'utilisateur n'a besoin que de configurer quelques paramètres de sa chaîne de compilation croisée, et Buildroot fait tout le reste.
L'infrastructure Kconfig a été mise à jour. Buildroot utilise la célèbre infrastructure Kconfig du noyau Linux pour décrire les options de configuration et pour proposer des interfaces telles que menuconfig, xconfig ou gconfig. La mise à jour de l'infrastructure apporte notamment le support de savedefconfig (pour générer des fichiers de configuration minimaux) et de nconfig (une nouvelle interface de configuration en ncurses).
L'infrastructure des paquets supporte maintenant Git et SVN. L'infrastructure des paquets est utilisée dans Buildroot pour décrire la façon de télécharger, extraire, « patcher », configurer, compiler et installer un composant logiciel dans le système embarqué. Jusqu'ici, seuls les téléchargements HTTP ou FTP étaient supportés. Buildroot peut désormais récupérer le code source d'un composant logiciel depuis un dépôt Git ou SVN. Les commandes
« make source »
(pour récupérer les archives de tous les paquets pour une construction hors-ligne) et« make external-deps »
(pour lister toutes les dépendances externes nécessaires à la construction hors-ligne d'un système) ont été corrigées.Au niveau des architectures : ajout du support pour ARM Cortex A9 et Sparc LEON, et suppression du support pour Alpha, Cris, IA64 et Sparc64 (architectures obsolètes ou peu utilisées dans l'embarqué).
Le travail de nettoyage des paquets s'est poursuivi : conversion de nombreux paquets vers les infrastructures officielles autotargets et gentargets, suppression d'un ancien mécanisme de hook, suppression de paquets obsolètes tels que dillo, libglib12, libgtk12, microwin et pcmcia.
De nouveaux paquets ont fait leur apparition : argp-standalone, gdk-pixbuf, gpsd, gst-ffmpeg, libmpeg2, kbd, librsvg, nuttcp, rng-tools, rrdtool et xz.
De nombreux paquets ont été mis à jour, et notamment la bibliothèque GTK+. Elle était restée depuis longtemps bloquée en version 2.12, car toutes les versions ultérieures de GTK+ ne fonctionnaient plus avec le backend graphique DirectFB, pourtant bien apprécié dans l'embarqué. Grâce au travail de Lionel Landwerlin au niveau de GTK+, les versions 2.20 et supérieures fonctionnent à nouveau au‑dessus de DirectFB, et Buildroot a été mis à jour pour utiliser GTK+ 2.20.
Enfin, notons que le cycle de développement de la 2010.11 a été marqué par une réunion Buildroot Developer Day, qui s'est déroulé le 29 octobre à Cambridge en Angleterre, juste après l'Embedded Linux Conference Europe. Cette journée de travail a réuni six développeurs et utilisateurs de Buildroot, et a permis de dégager un grand nombre d'idées pour le futur.
Voir également cet article pour plus de détails sur cette version.
Buildroot 2011.02
Amélioration du support pour les toolchains externes. Buildroot est depuis plusieurs versions capable d'utiliser des chaînes de compilation croisée dites externes, c'est-à-dire qui ont été générées en dehors de Buildroot. Ce mode permet typiquement d'utiliser des chaînes de compilation croisée comme celles fournies par CodeSourcery, très populaire dans le monde ARM. Dans cette version de Buildroot, une notion de profil de chaîne de compilation croisée a été ajoutée : Buildroot connaît donc un nombre de chaînes prédéfinies (actuellement les chaînes CodeSourcery pour ARM, PowerPC, MIPS et SuperH). Il connaît donc immédiatement la configuration de ces chaînes de compilation croisée, et peut même la télécharger et l'installer automatiquement au cours du processus de construction. Ce dernier point permet de simplifier l'utilisation de ces chaînes de compilation externes.
Réorganisation complète du support de plates-formes matérielles. Jusqu'ici, l'ajout du support d'une plate-forme matérielle était quelque peu compliqué. Le processus a été largement simplifié : il suffit maintenant d'écrire un fichier de configuration, d'une vingtaine de lignes, placé dans le répertoire configs, pour supporter une nouvelle carte. À cette occasion, le support a été ajouté pour la carte Mini2440, mais aussi pour les plates-formes Qemu ARM Versatile, Qemu MIPSel Malta, Qemu PowerPC G3 Beige, Qemu SH4 r2d et Qemu x86. Cela permet de générer très simplement un premier système fonctionnel que l'on peut tester dans Qemu.
Support de l'architecture Blackfin. Grâce à Mike Frysinger, cette architecture sans MMU est la première à être supportée par Buildroot. Pour ce type d'architecture, qui sert généralement à faire fonctionner des systèmes de taille relativement réduite, Buildroot est un très bon système de construction. Il y a donc fort à parier que d'autres architectures sans MMU seront supportées dans le futur.
Le back-end Crosstool-NG a été amélioré pour offrir plus d'options de configuration, et a été mis à jour vers une version plus récente de Crosstool-NG.
Le support pour ccache a été retravaillé, et il est maintenant réellement fonctionnel. Le fonctionnement actuel de Buildroot impliquant des reconstructions complètes assez fréquentes, avoir un cache de compilation est très intéressant, car il réduit sensiblement le temps de reconstruction.
Une nouvelle infrastructure CMake a été ajoutée. Cette infrastructure permet de grandement simplifier l'ajout de paquets logiciels qui utilisent CMake comme système de compilation. Pour l'instant, seuls cdrkit et libcuefile utilisent cette infrastructure, mais au vu de la popularité croissante de CMake, il y a fort à parier que d'autres paquets viendront ce joindre à cette nouvelle famille. De plus, cette nouvelle infrastructure génère un fichier de description CMake de la chaîne de compilation, ce qui permet de compiler très facilement des bibliothèques ou applications externes à Buildroot, en faisant simplement :
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/buildroot/output/toolchainfile.cmake
.Un travail de nettoyage du processus de construction de la toolchain interne a été réalisé. Ainsi, binutils, gmp, mpfr et mpc sont maintenant des paquets Buildroot normaux. Il reste à convertir gcc, gdb et µClibc.
Un début de travail a été réalisé dans l'objectif de produire un SDK autonome pour « cross‑compiler » des applications pour un système Buildroot. Maintenant, le compilateur croisé est avec les outils pour l'hôte dans
«
{mathjax} (O)/host/usr/bin »et non plus mélangé avec des outils pour la cible dans
«(O)/staging/usr/bin »
. De plus, le répertoire staging a été déplacé dans«
{mathjax} (O)/host/usr/PLATFORM-TUPLE/sysroot », de manière à ce que le répertoire
«(O)/host »
devienne autonome pour « cross‑compiler » des applications pour le système Buildroot.Python a été mis à jour en version 2.7.1 et le support a été amélioré. Depuis longtemps, Buildroot était bloqué sur la version 2.4, car Python est un logiciel particulièrement difficile à « cross‑compiler ». Cette mise à jour permet à Buildroot de bénéficier d'une version récente de Python. À noter que deux modules Python externes, python‑mad et python‑serial ont été ajoutés pour montrer comment de tels modules peuvent être intégrés à Buildroot.
Un ensemble de paquets pour le support GStreamer des codecs pour le DSP OMAP de Texas Instruments a été ajouté.
De nouveaux paquets ont fait leur apparition, avec notamment mpd (Music Player Daemon), de nombreuses bibliothèques de décodage audio liées à mpd, mais aussi les bancs d'essais whestone et dhrystone et d'autres outils comme xmlstarlet, fbgrab, irda-utils, lsuio, etc..
Ce cycle a également été marqué par une réunion de trois développeurs Buildroot à Bruxelles, juste après le FOSDEM. Une tradition semble maintenant s'être établie pour le projet Buildroot, avec deux réunions par an : une à Bruxelles après le FOSDEM, et une autre quelque part en Europe, après ELCE.
Voir également cet article pour plus détails sur cette version.
Dans les perspectives pour la prochaine version 2011.05, on trouve :
conversion de tous les paquets restants (une vingtaine) vers les infrastructures gentargets ou autotargets ;
amélioration du support pour les toolchains externes et la notion de SDK, probablement avec un petit adaptateur (wrapper) pour les outils de compilation croisée, afin de simplifier leur utilisation ;
avancement sur le support des paquets (avec pour objectif final de pouvoir générer et installer des paquets
« .ipk »
).
Aller plus loin
- Buildroot (635 clics)
- Buildroot 2010.11 release (21 clics)
- Buildroot 2011.02 release (66 clics)
# .ipk
Posté par cjlano . Évalué à 1.
Bonjour,
Comme toujours, une sortie de Buildroot est une bonne nouvelle. J'aimerais plus de précision sur les futurs paquets «.ipk».
Bravo pour cette version, je bidouille buildroot pour QEmu/ARM en ce moment. Merci :-)
A+
[^] # Re: .ipk
Posté par Thomas Petazzoni (site web personnel) . Évalué à 4.
Concernant le format du paquet, nous n'avons rien décidé encore. Il y a beaucoup de choses à faire avant de décider du format du paquet, et j'ai presque envie de dire que c'est un "détail" par rapport à tout le reste du travail :-)
Concernant le système de fichiers en lecture seule, c'est effectivement ce qu'utilisent un certain nombre de systèmes embarqués, mais pas tous. Certains veulent pouvoir mettre à jour de manière partielle certains aspects du système, et dans ce cas, un système de fichiers en lecture/écriture est utilisé. Le monde de l'embarqué est tellement vaste qu'il y a rarement de "règles générales".
[^] # Re: .ipk
Posté par zebra3 . Évalué à 3.
Ben je suppose qu'ils font comme sur un PC : on remonte la racine en rw, on installe le paquet et on remonte en ro. Je faisais ça sur une Debian montée en lecture seule; faut que je retrouve la méthode, mais c'est relativement simple (pre-commande et post-commande pour DPKG).
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: .ipk
Posté par Grégory CLEMENT . Évalué à 4.
Ce n'est pas toujours possible, car certains systèmes de fichier sont intrinsèquement en lecture seul, comme squashfs par exemple, donc dans ce cas tu ne peux pas le passer en écriture.
Une solution dans ce cas est l'utilisation d'unionfs.
# Mobile Buildroot 2011.02 est sorti !
Posté par vrm (site web personnel) . Évalué à 2.
Super content de voir que ça bouge au niveau de buildroot, par ce que perso OpenEmbbeded c'est un peu l'usine a gaz qui rame un max pour moi. Je vais ptetre retourner voir buildroot :)
[^] # Re: Mobile Buildroot 2011.02 est sorti !
Posté par Thomas Petazzoni (site web personnel) . Évalué à 6.
Il est clair que Buildroot est beaucoup plus simple et rapide à prendre en main, et que la compilation d'un système simple avec Buildroot prend beaucoup moins de temps qu'avec OpenEmbedded. Cela dit, il faut aussi reconnaître que Buildroot génère un système non-flexible (pas de gestion de paquets) et surtout oblige à de fréquents rebuilds complets du système (lorsque des changements importants de configuration sont réalisés).
En ce qui me concerne, je travaille surtout sur des systèmes à vocation "industrielle", avec souvent peu de composants (5 à 10 composants maximum), et pour ceux-là, un Buildroot convient très bien, et avoir une solution comme OpenEmbedded serait plutôt un fardeau qu'autre chose.
[^] # Re: Mobile Buildroot 2011.02 est sorti !
Posté par vrm (site web personnel) . Évalué à 1.
Quand j'ai laché buildroot il y a 5 ans c'était pas top, plein de truc ne builder pas, il fallait tout faire depuis le trunk. X ne compilait pas et le mainteneur surchargé n'avait pas vraiment le temps de corriger ça.
[^] # Re: Mobile Buildroot 2011.02 est sorti !
Posté par Thomas Petazzoni (site web personnel) . Évalué à 5.
Le projet a totalement changé depuis fin 2008 - début 2009. Jusqu'à cette date, il n'y avait pas de mainteneur clairement identifié, pas de releases stable, plein de développeurs qui committaient chacun dans leur coin dans un même dépôt SVN sans concertation, bref un projet sans mainteneur.
Depuis que Peter Korsgaard a repris le projet, une release stable a été publiée tous les trois mois, avec deux mois de développement et un mois de stabilisation. Nous faisons de nombreux tests de combinaison aléatoires de paquet (pour l'architecture ARM, on a un test qui tourne 24/24 7/7 sur une machine de la ferme GCC et qui teste des combinaisons aléatoires de paquets). Ce test nous a permis de corriger un très très grand nombre de problèmes. Je pense que la situation est donc bien, bien meilleure qu'il y a cinq ans. Sans parler des corrections des problèmes de build, la quasi-totalité de Buildroot a été ré-écrit, et beaucoup de choses ont été simpliées, l'arborescence est plus claire, les paquets plus homogènes, etc. On a aussi pas hésité à supprimer des paquets obsolètes, trop spécifiques, et qui ne compilaient pas depuis longtemps.
Cela dit, vu le nombre de combinaisons d'options de configuration qu'il y a, c'est juste impossible de couvrir tous les cas. Mais la communauté est maintenant bien active, on réagit en général rapidement aux problèmes remontés par les utilisateurs.
[^] # Re: Mobile Buildroot 2011.02 est sorti !
Posté par vrm (site web personnel) . Évalué à 1.
Super, je vais rester ça avec ma carte blackfin.
Merci pour les infos.
[^] # Re: Mobile Buildroot 2011.02 est sorti !
Posté par Thomas Petazzoni (site web personnel) . Évalué à 2.
Le support Blackfin venant juste d'être ajouté, il est fort probable qu'il y ai encore des soucis. N'hésites pas à les remonter sur la liste, je suis sûr que Mike Frysinger sera très réactif pour y répondre.
[^] # Re: Mobile Buildroot 2011.02 est sorti !
Posté par Sekigo . Évalué à 1.
J'avais aussi utilisé buildroot pour un projet (qui a avorté, suite à un problème technique).
Et pour la toolchain, j'utilisais crosstool-ng.
Voir les deux projets réunis, c'est chouette, je trouve.
Franchement, même si mon projet a foiré, ça m'a appris pas mal de choses sur Linux (j'ai lu la documentation du kernel + deux trois petites bricoles sur le net), et sur comment ça marche derrière une distribution. Et avec crosstool-ng + buildroot, c'est quand même assez simple de se monter un système.
[^] # Re: Buildroot 2011.02 est sorti !
Posté par ymorin . Évalué à 5.
Pas franchement "réunis" : les deux projets restent séparés et autonomes. On travaille de concert pour essayer de mettre en commun nos efforts sur les chaînes de compilation (croisée, la compilation). (NB.: on a aussi mis en commun nos efforts de lever de coudes, et ça, c'est bien aussi ! :-) )
Mais des besoins de buildroot ont motivé (et motiveront peut-être encore) des évolutions dans crosstool-NG. Et l'inverse sera peut-être vrai lorsque (si !) le méchanisme interne de buildroot pour construire les chaînes de compilation sera remplacé par crosstool-NG.
Héhé ! C'est agréable à lire ! Merki ! :-)
(Et Thomas qui semble impliquer que je trolle ^Wposte regulièrement sur DLFP. Voila, c'est fait! :-] )
# Plate-forme Kirkwood
Posté par rahan . Évalué à 1.
Une question simple: Est-ce que buildroot gère la plate-forme Kirkwood de Marvell ? genre sheevaplug, guruplug ou des NAS du type synology ou QNAP...
[^] # Re: Plate-forme Kirkwood
Posté par ymorin . Évalué à 1. Dernière modification le 04 mars 2011 à 19:56.
Il n'y a pas de raison que tu ne puisses pas utiliser buildroot pour générer un système pour ces machines.
Il y a deux risques a prendre en compte :
Pour le second, ces machines viennet avec un chargeur d'amorçage pré-installé, et les raison de le modifier sont ésotériques. Il est plus sage (dans un premier temps!) de garder le chargeur déjà présent sur ces machines.
Pour le noyau, c'est plus sioux. En effet, buildroot utilise le noyau Linux de kernel.org. Si ce noyau a déjà le support de la machine, alors pas de souci. Sinon, il te faudra trouver et ajouter les patchs, que buildroot appliquera automatiquement. Ensuite, il te restera à configurer ton noyau avec :
Pour ce qui est de la chaîne de compilation croisée, si tu n'en as pas, pas de soucis : buildroot en générer une automatiquement. Il te suffit de spécifier le CPU et les optimisations à utiliser, et buildroot fait le reste. Bien entendu, je ne peux que te conseiller d'utiliser le backend
crosstool-NG
pour celà ! ;-)Et sinon, pour toute question et/ou rapport de disfonctionnement :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.