Sortie de Buildroot 2014.02

Posté par  (site web personnel) . Édité par Benoît Sibaud, claudex et palm123. Modéré par ZeroHeure. Licence CC By‑SA.
45
2
mar.
2014
Do It Yourself

Alors que la dernière dépêche annonçant une version de Buildroot publiée sur LinuxFr.org date d'il y a 3 ans, Buildroot a continué a publier tous les trois mois une version stable. À l'occasion de la sortie de la version 2014.02 de Buildroot, cette dépêche propose un petit retour sur les récentes avancées du projet.

Pour ceux qui ne connaissent pas le projet, Buildroot est un outil qui simplifie et automatise le processus de création d'un système Linux embarqué. À partir d'une configuration, Buildroot est en mesure de générer une chaîne de compilation croisée, un système de fichiers racine avec diverses applications et bibliothèques, une image de noyau Linux et un ou plusieurs bootloaders. Buildroot supporte plus de 1000 applications ou bibliothèques, pour lesquelles leur cross-compilation se résume à cocher une option dans l'interface de configuration.

À noter que le projet Buildroot participera au Google Summer of Code 2014, et recherche donc des étudiants souhaitant travailler sur le projet tout en étant payé pendant l'été.

Voir la suite de la dépêche pour plus de détails.

Sommaire

Introduction

Dans le contexte des plateformes Linux embarqué qui utilisent souvent des architectures autres qu'x86 ou x86-64, différentes solutions existent pour disposer d'un système Linux fonctionnel:

  • Utiliser une distribution binaire, telle que Debian, Ubuntu ou des dérivées spécialisées tels que Raspbian. L'inconvénient de telles solutions est d'une part la taille du système de fichiers (souvent plusieurs centaines de mega-octets) et la nécessité de tout compiler sur la cible, qui est souvent peu performante par rapport à un PC moderne. Par exemple, compiler un noyau Linux sur une plateforme telle que la RaspberryPi est particulièrement long.

  • Utiliser un outil de génération de système Linux embarqué par cross-compilation. Le principe est que l'outil va compiler à partir des sources tous les éléments du système, par cross-compilation, ce qui permet d'utiliser la puissance d'un PC moderne. Ces outils permettent de générer des systèmes de fichiers vraiment petits (2 Mo le système de fichiers par défaut pour Buildroot). C'est dans cette catégorie d'outils que l'on trouve Yocto, OpenEmbedded, Buildroot, OpenWRT ou PTXdist. Buildroot se distingue notamment par sa simplicité d'utilisation et sa communauté très active.

Qui utilise Buildroot ?

De nombreuses sociétés utilisent Buildroot pour leurs produits Linux embarqués, ou en tant que base comme environnement de développement pour leurs clients. Quelques exemples:

  • Google utilise Buildroot pour générer le système Linux embarqués des boîtiers du projet Google Fiber. Le code source de leur Buildroot est disponible.
  • Barco pour de très nombreux produits de visualisation.
  • Rockwell Collins pour des équipements embarqués dans l'avionique notamment. Rockwell Collins contribue également au projet Buildroot.
  • Atmel, Marvell, Analog Devices ou Imagination Technologies comme environnement de développement pour leurs processeurs (ARM pour Atmel et Marvell, Blackfin pour Analog Devices, MIPS pour Imagination Technologies). Il est intéressant de noter que depuis le rachat de MIPS par Imagination Technologies, Imagination a significativement contribué à l'amélioration du support MIPS dans Buildroot et à la maintenance générale du projet. La société, souvent pointée du doigt pour son absence de coopération avec la communauté open-source en ce qui concerne l'IP d'accélération 3D PowerVR, a également financé l'une des réunions de travail du projet Buildroot.
  • La société derrière le processeur Kalray, récemment l'objet d'une dépêche sur LinuxFr.org utilise également Buildroot pour générer une chaîne de compilation croisée et des systèmes Linux embarqués pour cette plateforme massivement parallèle.

Et évidemment, de nombreux hobbyistes utilisent Buildroot pour leurs projets sur RaspberryPi, sur BeagleBoneBlack ou n'importe quelle autre plateforme embarquée.

Qu'est-ce que Buildroot supporte ?

  • Buildroot supporte un grand nombre d'architectures: ARM, PowerPC, MIPS, x86, x86-64 sont probablement les plus connues, mais l'outil supporte également des architectures plus spécifiques telles qu'ARC, Xtensa, AVR32, Blackfin, Sparc, SuperH, Microblaze, NIOS II, etc.
  • Buildroot permet de générer des chaînes de compilation croisées utilisant les bibliothèques standard C glibc, eglibc ou uClibc. Le support de la bibliothèque standard C musl est prévu dans le futur proche.
  • Buildroot permet de réutiliser des chaînes de compilation croisées existantes. Le projet peut par exemple utiliser directement les chaînes de compilation Sourcery CodeBench, Linaro ou celles d'Analog Devices pour l'architecture Blackfin. Buildroot peut également utiliser les chaînes de compilation croisée générées par lui-même (!) ou par Crosstool-NG.
  • Buildroot permet de compiler une image de noyau Linux, en définissant quelle version et configuration est souhaitée.
  • Buildroot permet de compiler un grand nombre d'applications et de bibliothèques, avec plus de 1000 composants disponibles, parmi lesquels: X.org, Qt4 et Qt5, GStreamer, Wayland, Pulseaudio, systemd, Python, Lua, Perl, PHP, et un nombre considérable d'autres bibliothèques ou outils.
  • Buildroot va ensuite pouvoir générer des images de système de fichiers racine à différents formats: simple tarball, image ext2/3/4, image JFFS2, UBIFS, squashfs, ISO9660, etc.

Nouveautés

Nous vous proposons un petit retour sur les nouveautés apportées depuis un an dans Buildroot.

Apportées par la version 2013.02

Les changements importants apportés par cette version ont été:

  • Grand nombre de nouveaux paquets (66): Jamvm/Classpath, outils de développement (flashbench, perf, ..), paquets relatifs à Qemu, multimedia (dvdsnoop, gst-fsl-plugins, jpeg-turbo, tvheadend, yavta, ..), paquets pour le support de la RaspberryPi, paquets contenant des microcodes pour différents matériels.
  • Infrastructure: support de l'intégration avec Eclipse. Option pour configurer le mot de passe root, support pour des scripts dits post image, génération du support des scripts *-config.
  • Chaîne de compilation : GDB 7.51, Crosstool-NG 1.17.0, Linaro ARM 2012.11/12 + 2013.01, Sourcery CodeBench MIPS 2012.03/09.
  • Architecture: support ARM NEON, ARM OABI est déprécié, support Cortex A5/A15.
  • Configurations minimales pour diverses plateformes: Calao USB-A9260, snowball, QEMU PPC440 émulant la carte ML507, QEMU ARM Exynos4210.

Cette version ajoute 849 commits, provenant de 52 contributeurs différents.

Apportées par la version 2013.05

Les changements importants apportés par cette version ont été:

  • Grand nombre de nouveaux paquets (84): Qt5, Wayland, paquets liés aux systèmes de fichiers (exfat-utils, f2fs-tools, genimage, genpart, mtools, …), applications et bibliothèques réseau (aircrack-ng, crda, libwebsockets, mongoose, mongrel2, nmap, nodejs, openobex, openpgm, ussp-push, wireless-regdb, wireshark, …), paquets liés à ZeroMQ (cppzmq, czmq, filemq, zic, zyre), paquets de bibliothèque Javascript, etc.
  • Infrastructure: support pour plusieurs implémentations d'OpenGL / ES / EGL / OpenVG. Mécanisme permettant à chaque paquet d'ajouter des utilisateurs systèmes, afin de faire tourner des démons en non-root. Amélioration de la logique servant à appliquer des patches à chaque paquet.
  • Chaîne de compilation: GCC 4.6.4 / 4.7.3 / 4.8.0. GCC 4.7 étant maintenant la version par défaut. Crosstool-NG 1.18.0, Linaro ARM/Aarch64 2013.02/03, nouvelle chaîne de compilation externe pour l'architecture Microblaze. Le backend Crosstool-NG est déprécié.
  • Architecture: ajout du support des architectures ARC et Blackfin, support du format binaire FLAT pour les architectures sans MMU.
  • Configurations minimales pour diverses plateformes: Atmel at91sam9g45m10ek, Freescale mpc8315erdb & p1010rdb, Armadeus apf27 / apf28, Openblocks A6, Raspberry pi, gnublin board.

Cette version ajoute 903 commits, provenant de 70 contributeurs différents.

Apportées par la version 2013.08

Les changements importants apportés par cette version ont été:

  • Le travail de Spenser Gilliland pour améliorer le support des fonctionnalités multimédia des plateformes ARM, réalisé dans le cadre d'un Google Summer of Code, a commencé à être intégré dans Buildroot. Pour cette version, le support OpenMAX pour RaspberryPi a été intégré, l'ajout de GStreamer 1.x, la mise à jour de toute la stack glib/gtk/webkit, le support OpenGL pour les plateformes à base de TI OMAP et de processeurs Allwinner.
  • Le mécanisme de génération de chaîne de compilation croisée a aussi donné lieu à de nombreuses améliorations: il a été complètement converti à l'infrastructure de paquets de Buildroot, il supporte désormais la bibliothèque standard C eglibc, et il a un meilleur support pour les diverses options de gestion de la virgule flottante sur ARM (support EABIhf, support EABI soft-float et softfp) ainsi que des jeux d'instructions Thumb et Thumb 2.
  • Le support OABI pour l'architecture ARM a été complètement supprimé, après avoir été marqué comme déprécié pour une longue période. Le support avait de toute façon été retiré des dernières versions de GCC.
  • Configurations minimales pour diverses plateformes: mise à jour de beaglebone_defconfig, nouvelles configurations pour la CubieBoard, Olinuxino mx233 d'Olimex, et la TNY-A9G20-LPW de Calao Systems

Cette version ajoute 744 commits, provenant de 74 contributeurs différents.

Apportées par la version 2013.11

Les changements importants apportés par cette version ont été:

  • Grand nombre de nouveaux paquets (41): principalement liés au réseau: aiccu, autossh, igmpproxy, iputils, knock, libssh2, p910nd, snmppp and tcping, modules Python: python-crc16, python-ipy, python-pyzmq et nouveaux composants de Qt 5.1: qt5sensors, qt5serialport, qt5x11extras.
  • Infrastructure: support de make 3.82, amélioration de la génération des locales, support pour le download des sources de paquet par CVS (!), amélioration de l'infrastructure « legal-info » qui sert à générer la liste des composants et de leurs licences, pour aider à la mise en conformité légale d'un système Linux embarqué avant sa distribution.
  • Chaîne de compilation : GCC 4.8.2, support de la bibliothèque standard C glibc, ajout de nombreux correctifs pour uClibc, support des chaînes de compilation externes utilisant la bibliothèque standard C musl. Mise à jour des chaînes de compilation externes Linaro. Support Fortran et Objective-C marqué comme déprécié.
  • Architecture: ajout du support de l'architecture Nios-II (une architecture de soft-core pour FPGA, proposé par Altera), nombreuses améliorations au support de l'architecture MIPS.
  • Configurations minimales pour diverses plateformes: ajout de configurations pour la cubieboard2, freescale i.MX 6sololite evk, sabre-sd et wandboard.

Cette version ajoute 909 commits, provenant de 77 contributeurs différents.

Apportées par la version 2014.02

Les changements importants apportés par cette version ont été:

  • Support d'un mécanisme appelé BR2_EXTERNAL qui permet de conserver en dehors des sources de Buildroot des définitions de paquets et des configurations, ce qui est fort utile pour les entreprises souhaitant séparer clairement le coeur de Buildroot de leurs définitions de paquets spécifiques. Voir la documentation de Buildroot pour les détails d'utilisation.
  • Nettoyage du nommage des variables d'environnement pour plus de cohérence.
  • Chaîne de compilation : nouveaux correctifs pour uClibc, correctif pour GCC sur ARM, mise à jour des chaînes de compilation externes Sourcery CodeBench et Linaro, ajout du support de l'architecture Microblaze pour la génération de chaînes de compilation par Buildroot.
  • Ajout d'infrastructure de paquets Python et Luarocks. Ces infrastructures viennent se joindre aux infrastructures existantes pour les paquets à base d'Autotools et de CMake, et simplifient grandement l'ajout de nouveaux paquets pour des modules Python ou Lua.
  • Grand nombre de nouveaux paquets: liés au réseau: c-ares, ca-certificates, fping, libmbim, libnfs, libshairplay, libsocketcan, modemmanager, mtr, net-tools, rtmpdump, rtptools, smcroute et tcpreplay. Multimedia: gst1-libav, fswebcam, jasper, lbreakout2, libass, libbluray, libcdio, libmodplug, ltris, minidlna and vlc. Matériel: avrdude, cwiid, gpm, intel-microcode, iucode-tools, libevdev, mmc-utils, smstools3 and ti-uim. Python: configobj, dialog, json-schema-validator, keyring, msgpack, posix-ipc, pyasn, pycrypto, pysnmp, pysnmp-apps, pysnmp-mibs, pyusb, simplejson, tornado and versiontools. Lua: lsyscall and luarocks. Développement: apitrace, evemu and ktap.
  • Configurations minimales pour diverses plateformes: ajout de configurations pour l'Armadeus APF51 et la Zedboard, mise à jour d'un grand nombre de configurations.

Cette version ajoute 1117 commits, provenant de 83 contributeurs différents.

À venir dans la prochaine version

Parmi les changements pressentis pour la prochaine version 2014.05, nous trouvons:

  • Un nouveau site Web pour Buildroot, qui le mérite vraiment!
  • L'ajout d'une infrastructure de paquets pour les modules Perl
  • Une mise à jour significative de Python et Python 3, avec la possibilité de compiler des modules Python pour Python 3.
  • Une mise à jour importante de systemd, et du support d'eudev pour ceux qui souhaitent disposer d'udev, mais sans systemd.
  • Mise à jour du support de l'accélération hardware pour les plateformes i.MX et TI OMAP.
  • Ajout du support du paquet XBMC.
  • Et plein d'autres choses, selon les patches que vous enverrez!

Dynamisme de la communauté

Comme le montre un billet de blog publié sur le site Free Electrons, la communauté Buildroot est de plus en plus dynamique. Le nombre de contributeurs, de commits par mois, l'activité sur la liste de discussion et le nombre de paquets disponible ne cesse d'augmenter. Ainsi, l'activité sur la liste de discussion est passée d'environ 500 courriels par mois il y a quelques années, à près de 1500-2000 courriels par mois.

La dernière version, avec plus de 1100 commits sur trois mois provenant de 80 contributeurs différents, est un autre exemple de la popularité croissante de Buildroot dans l'écosystème Linux embarqué.

Démarrer avec Buildroot en quelques étapes

Avec Qemu

  1. Téléchargez Buildroot
  2. Exécutez la commande make qemu_arm_vexpress_defconfig pour charger la configuration minimale pour cette plateforme, qui compilera une toolchain, un noyau Linux, et un système de fichiers minimal contenant juste Busybox.
  3. Exécutez la commande make pour lancer la compilation.
  4. Démarrez le système dans Qemu avec qemu-system-arm -M vexpress-a9 -kernel output/images/zImage -drive file=output/images/rootfs.ext2,if=sd -append "console=ttyAMA0,115200 root=/dev/mmcblk0" -serial stdio -net nic,model=lan9118 -net user

Voir board/qemu/arm-vexpress/readme.txt dans les sources de Buildroot pour plus de détails.

Sur la Raspberry Pi

  1. Téléchargez Buildroot
  2. Exécutez la commande make raspberrypi_defconfig.
  3. Exécutez la commande make
  4. Suivez les instructions dans board/raspberrypi/readme.txt pour créer votre carte SD amorçable

Participation au Google Summer of Code

Vous êtes étudiant? Vous avez déjà une expérience minimale de Linux embarqué sur RaspberryPi ou autre plateforme? Vous voulez contribuer à un projet open-source cet été tout en étant payé par Google? Alors peut-être que vous devriez candidater pour participer à l'un des projets proposés par Buildroot dans le cadre du Google Summer of Code 2014, ou nous proposer vos propres idées de projets relatifs à Buildroot.

Voir la page concernant le GSoC 2014 pour le projet Buildroot pour plus de détails.

Pour plus de détails sur Buildroot

Pour plus de détails, vous pouvez consulter les vidéos des conférences suivantes:

Avoir de l'aide

Pour avoir de l'aide sur Buildroot:

Aller plus loin

  • # Autre moyen de compilation embarqué

    Posté par  (site web personnel) . Évalué à -4.

    Il existe un autre moyen de réalisé un système embarqué: il faut disposé d'un émulateur (Qemu) sur la machine hôte qui se rapproche le plus du hardware de la machine embarqué. La compilation est normalement bien plus rapide que sur la machine cible.

    • [^] # Re: Autre moyen de compilation embarqué

      Posté par  . Évalué à 5.

      Le but de Buildroot est justement de tout cross-compiler sur la machine hôte.

    • [^] # Re: Autre moyen de compilation embarqué

      Posté par  . Évalué à 4.

      Si ton hôte est en x86 et que ta cible est en ARM par exemple, Qemu va ramer bien plus pour émuler du ARM sur du x86 que de compiler directement sur la cible ARM.

      La cross compilation permet de compiler du code vers la cible en utilisant un binaire écrit avec les instructions de l'hôte, donc sans émulation.

  • # Sur la Rasberry Pi

    Posté par  . Évalué à 2.

    Il est écrit :
    Sur la Rasberry Pi :
    Téléchargez Buildroot
    Exécutez la commande make rasberrypi_defconfig.
    Cependant j'ai l'erreur suivante :
    [root@EEE-PC-DERORY buildroot-2014.02]# make rasberrypi_defconfig
    make: *** No rule to make target 'rasberrypi_defconfig'. Arrêt.

    La commande make rasberrypi_defconfig est-elle correcte ?
    Merci

  • # Question

    Posté par  . Évalué à 1.

    Est ce que pour avoir un Xenomai qui tourne sur Buildroot il est nécessaire de patcher soi-même ou existe-t-il une solution "push-button" comme l'on trouve sur Yocto ou Ptxdist ?

    • [^] # Re: Question

      Posté par  (site web personnel) . Évalué à 6.

      Il existe une solution "push button". Il suffit d'aller dans le menu "Linux kernel", et de sélectionner Xenomai. Évidemment, Xenomai prennant la forme de patches disponibles uniquement pour certaines versions bien précises du kernel, il faudra indiquer à Buildroot une version du kernel pour laquelle un patch Xenomai existe.

      • [^] # Re: Question

        Posté par  . Évalué à 1.

        OK trouvé dans "Linux Kernel extensions" Adeos/Xenomai RT Patch

        Merci pour la réponse.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.