Linux Embedded

Le blog des technologies libres et embarquées

Buildroot Summer Camp 2016

Introduction :

Le second Buildroot Summer Camp à rassemblé six core développeurs et contributeurs réguliers Buildroot du 1er au 5 Juillet à Toulouse. Pour ne citer qu’eux : Peter Korsgaard, Samuel Martin, Yann E. Morin, Maxime Hadjinlian, Thomas Petazzoni (notre hôte) et Romain Naour (moi-même). Cela nous à permis de travailler pendant 5 jours à temps complet sur Buildroot et de traiter un grand nombre de sujets qui vous sont présentés ci-dessous.

Nous nous sommes fixés comme principal objectif de réduire au maximum le nombre de patches en attente, plutôt que de travailler sur un sujet au long cours qui aurait pris la totalité du séjour. Nous avons commencé avec environ 250 patches dans le patchwork pour arriver sous l’objectif des moins de 100 patches (un cours instant) avec 98 patches. Le patch le plus ancien datant du précédent Buildroot Summer Camp l’année dernière a même pu être traité et fermé définitivement.Comme l’a fait remarquer Thomas Petazzoni, ce nombre n’a pas été atteint depuis plusieurs années. Ce travail de relecture et de tests doit continuer dans la durée afin de garder un nombre de patches raisonnable et pouvoir se concentrer sur des sujets plus compliqués ou sujet à discussion.

Au total, 357 patches ont été commités dans Buildroot et 1402 emails ont été échangés tout au long du Summer Camp.

Voici un récapitulatif des nouveautés intégrées :

Configurations :

– Ajout de configuration Qemu pour MIPS r6 grâce au travail de Vicente Olivert Riera (Imagination Technologies). Ces configurations permettent de tester facilement et rapidement sous Qemu les paquets compilés pour cette architecture.

Infrastructure :

– Ajout de BR2_REPRODUCIBLE qui permettra progressivement de pouvoir compiler un système complet de façon reproductible. Les binaires générés seront identique à l’octet près quelle que soit la machine qui a été utilisée lors de la compilation et la date de compilation. Ce travail à été initié par Gilles Chanteperdrix qui est aussi le mainteneur du projet Xenomai avec Philippe Gerum.

– Le support de systemd a été sérieusement retravaillé avec plusieurs dizaine de patches issus du travail de Gave Evans et du travail complémentaire de Maxime Hadjinlian et Yann E. Morin. Systemd a fait l’objet d’un précédent article sur Linuxembedded ici

– Ajout du support pour télécharger des paquets depuis un dépôt git comportant des sous modules (submodules). Pour cela, il faut ajouter <pkg>_GIT_SUBMODULES = YES dans le paquet Buildroot pour récupérer les sous modules. Ce support à été ajouté par Yann E. Morin. Pour l’instant un seul paquet utilise cette nouvelle fonctionnalité (sunxi-mali), mais de plus en plus de projets les utilisent pour fixer la version d’une bibliothèque externe.

– Les dépendances d’un paquet compilé pour la machine de build (host) ne sont plus automatiquement déterminées à partir des dépendances du paquet pour la cible (target). Cette fonctionnalité a souvent occasionné des erreurs dans la maintenance et la création de paquets. Toutes les dépendances doivent maintenant être explicite aussi bien pour la version host que pour la version target d’un paquet. Ce travail à été réalisé par Julien Floret.

– L’infrastructure de paquet à été modifiée pour ne plus essayer de télécharger quand <pkg>_VERSION n’est pas initialisé. Cela permet de simplifier les paquets qui ont leur code source  directement dans Buildroot (mkpasswd, makedevs, mkpimage etc), ainsi que les paquets “virtuel” qui ne disposent d’aucun code source.

– Une réorganisation de l’affichage des options des paquets a été initiée par Yann E. Morin. Quand il y a plus de 5 sous options, il est maintenant recommandé d’utiliser une “menuconfig” plutôt que d’utiliser “config + menu” dans les fichier Config.in. Cette réorganisation n’a pas été entièrement appliquée dans Buildroot et est encore en cours de discussion. Peter et Thomas ont des réserves sur le bénéfice apporté sur l’utilisation des nouveaux sous-menus.

– Les paquets peuvent enregistrer des “target finalize hooks” en utilisant <pkg>_TARGET_FINALIZE_HOOKS plutôt que d’utiliser des hooks globale TARGET_FINALIZE_HOOKS. Cela permet de s’assurer que ces hooks sont appelés uniquement lorsque le paquet correspondant est appelé. Cependant, cette fonctionnalité fait partie des fonctionnalités avancées et la plupart des paquets ne s’en servent pas.

– Une nouvelle option, BR2_ROOTFS_POST_FAKEROOT_SCRIPT permet de définir un script qui sera utilisé au moment de la création de l’arborescence du système de fichiers, c’est à dire, à l’intérieur de l’environnement fakeroot. L’utilisation est similaire à l’utilisation d’un script post-build ou d’un post-image. Ce travail a été initialement proposé par Cam Hutchison et retravaillé par Yann E. Morin.

Paquets :

– Nouveaux paquets ajoutés: python-engineio, python-socketio,
python-tomako, openblas, python-xlwt, python-xlutils, libuio,
python-scapy3k, babeld, systemd-bootchart, acpitool, libaacs,
libbdplus, libvdpau, ninja, supertuxkart, acpica, runc,
docker-containerd, jemalloc, texinfo, rs485conf, circus, dante.

– Mise à jour des outils SELinux grâce au travail d’Adam Duskett.
Pour rappel, SELinux permet de gérer toute la politique de sécurité d’un système Linux.

– Le support pour compiler Qemu avec le mode “system emulation” a été ajouté en complément du mode “user emulation”. Ce travail à été initié par Simon Maes et finalisé lors du Summer Camp.

– Tous les symboles BR2_PACKAGE_BUSYBOX_SHOW_OTHERS qui étaient dans package/Config.in on été déplacés dans leur paquets respectif.

– Le paquet libgpg-error à été mis à jour avec la version 1.23. Ce patch était l’un des plus anciens car les nouvelles versions de cette bibliothèque ne supportent qu’un nombre limité d’architectures. Cette limitation a dû être propagée aux nombreux paquets l’utilisant. Ce travail à été initié par Jörg Krause et finalisé par Maxime Hadjinlian et Thomas Petazzoni.

– Le paquet host-texinfo a été réintroduit afin de fournir aux paquets gdb et binutils l’outil makeinfo lorsque cela est nécessaire. En effet, il n’est malheureusement pas possible de désactiver la documentation de gdb et binutils qui nécessite makeinfo.

Toolchain :

– Amélioration du support du langage Fortran pour les toolchain Buildroot et ajout de ce support pour les toolchain externes grâce au travail de Samuel Martin et de Vicente Olivert Riera.

– Le support de l’architecture Blackfin pour les toolchain internes à été ajouté par Waldemar Brodkorb. Cela permettra dans un future proche de supprimer les anciennes toolchain Blackfin ADE (gcc 4.3 ou 4.4). Waldemar est aussi le mainteneur de uClibc-ng qui est un fork de uClibc et contribue à Buildroot pour le support des architectures m68k, sparc, sparc64.

Discussions :

D’autres sujets on été discutés mais sont encore sujet à discussion ou n’ont pas été acceptés.

– Nous avons décidé de ne pas accepter le support des configurations fragmentées (merged defconfig) car la solution proposée n’est pas suffisamment flexible et que Buildroot n’est pas en charge de générer à la volée les configurations fragmentées. Cependant, la possibilité de déplacer cette fonctionnalité vers un BR2_EXTERNAL est en cours de discussion.
(http://lists.busybox.net/pipermail/buildroot/2016-June/165384.html, http://lists.busybox.net/pipermail/buildroot/2016-July/167059.html).

– Comme mentionné plus haut, nous n’avons pas accepté un grand nombre de commits de la proposition de réarrangement pour utiliser un ‘menuconfig’
(http://lists.busybox.net/pipermail/buildroot/2016-July/166512.html)

– Suite à l’amélioration de systemd et pour préparer l’ajout du support d’un système en lecture seule avec systemd, nous avons discuté de la proposition de Yann E. Morin sur la séparation du paquet skeleton en plusieurs paquets.
(http://lists.busybox.net/pipermail/buildroot/2016-July/167073.html)

Conclusion :

Tous les sujets n’ont pas pu être abordés par manque de temps ou par leur complexité (support de llvm/clang par exemple) mais ce n’est que partie remise.

Un nombre conséquent de patchs est à prévoir sur les prochaines release de Buildroot (principalement 2016.08 et 2016.11) pour améliorer le support de l’architecture m68k et processeurs ARM cortex-M dont les toolchain (br-arm-cortex-m4-full, br-m68k-5208-full, br-m68k-68040-full) ont été ajoutées après la release Buildroot 2016.05.

Le prochain meeting Buildroot aura lieu à Berlin et du 14 au 16 Octobre après l’ELCE.

Je tiens à remercier OpenWide et Smile de m’avoir permis d’assister à ce Buildroot Summer Camp.

Ref :

[Buildroot] Buildroot Summer Camp next week: topics?

[Buildroot] Report from the Buildroot Summer Camp

[Buildroot] Buildroot Meeting at ELCE: October 14-16

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *