L’éco-système « The Yocto Project » est assez touffu. En effet, Yocto Project chapeaute plusieurs sous-projets pour lesquels il fournit des ressources de développement : Bitbake, Open Embedded, Poky, les layers des sponsors « platiniums » ainsi que l’hébergement de nombreux layers supportant diverses plateformes matérielles.
Depuis plus d’une décennie, la mise en route d’un projet Yocto passait par l’utilisation d’un starter pack contenant les outils de base et les recettes minimales pour produire une image. Cet environnement se nommait Poky.
Poky était bien pratique pour s’assurer d’une mise en œuvre initiale correcte, et toutes mes sessions de formation et tutoriels sur Yocto commençaient systématique par un :
git clone git://git.yoctoproject.org/poky -b <current-branch>
Toutefois les mainteneurs de Yocto Project ont pris la décision de ne plus maintenir Poky à partir de la future branche Wrynose d’Avril prochain. Leur objectif : favoriser l’utilisation d’un outil nommé bitbake-setup qui peut s’occuper de la mise en œuvre de l’environnement de travail.
À titre personnel cela ne m’enchante guère car bitbake-setup est un concurrent de l’outil Yocto Cooker auquel j’ai contribué et que j’ai présenté dans plusieurs articles ici. De plus Yocto Cooker dispose de fonctionnalités supplémentaires que j’estime importantes.
En attendant que Yocto Cooker soit prêt à se passer de Poky (ce qui ne saurait tarder). Je vous présente ici la méthode manuelle que j’emploie pour construire l’environnement de travail et faire un build simple sans utiliser Poky.
Commençons par nous créer un répertoire pour accueillir les layers et un autre pour les futurs builds.
[no-poky]$ mkdir layers
[no-poky]$ mkdir builds
Téléchargeons, dans le sous-dossier layers deux dépôts git : celui de bitbake (l’outil de construction utilisé dans le projet Yocto) et celui de openembedded-core (le layer contenant les recettes de base pour construire une image) :
[no-poky]$ cd layers/
[layers]$ git clone git://git.openembedded.org/bitbake
[layers]$ cd bitbake
[bitbake]$ git checkout yocto-5.0.13
[bitbake]$ cd ..
[layers]$ git clone git://git.openembedded.org/openembedded-core -b scarthgap
[layers]$ cd ..
[no-poky]$
Il est important que ces deux répertoires soient côte-à-côte dans l’arborescence, le script oe-init-build-env que nous allons appeler se trouve dans openembedded-code et recherche bitbake dans le répertoire se trouvant à côté de lui.
« Sourçons » le script pour qu’il puisse créer notre dossier de build, et qu’il configure les variables d’environnement du shell nécessaires.
[no-poky]$ source layers/openembedded-core/oe-init-build-env builds/build-qemu
[...]
[build-qemu]$
J’aime bien éditer le fichier conf/local.conf, pour dé-commenter et compléter les deux lignes suivantes afin que les dossiers downloads et sstate-cache soient partagés entre mes différents builds. Ce n’est pas indispensable, mais c’est une bonne pratique.
DL_DIR ?= "${TOPDIR}/../../downloads"
[...]
SSTATE_DIR ?= "${TOPDIR}/../../sstate-cache"
Enfin, nous pouvons lancer un build minimal. Par défaut il s’agira d’une émulation de machine x86_64 par Qemu :
[build-qemu]$ bitbake core-image-minimal
Patientons quelques dizaines de minutes et testons le résultat :
[build-qemu]$ runqemu nographic
[...]
OpenEmbedded nodistro.0 qemux86-64 /dev/ttyS0
qemux86-64 login: root
root@qemux86-64:~# uname -a
Linux qemux86-64 6.6.111-yocto-standard #1 SMP PREEMPT_DYNAMIC Tue Oct 14 01:25:53 UTC 2025 x86_64 GNU/Linux
root@qemux86-64:~#
Raspberry Pi
Si l’on souhaite faire une image pour une vraie carte et non plus une émulation, il va falloir charger les recettes qui la concernent. Elle sont regroupés dans différents layers, dont bon nombre sont hébergés sur les serveurs de Yocto Project. Prenons par exemple un Raspberry Pi 4 :
[no-poky]$ cd layers
[layers]$ git clone git://git.yoctoproject.org/meta-raspberrypi -b scarthgap
[layers]$ cd ..
[no-poky]$ source ./layers/openembedded-core/oe-init-build-env builds/build-rpi4
[build-rpi4]$
Avant de lancer la compilation, il faut penser à ajouter le layer meta-raspberrypi à la liste des layers pris en compte :
[build-rpi4]$ bitbake-layers add-layer ../../layers/meta-raspberrypi/
Puis nous configurons le fichier local.conf en ajoutant les lignes suivantes :
MACHINE = "raspberrypi4-64"
ENABLE_UART = "1"
LICENSE_FLAGS_ACCEPTED += "synaptics-killswitch"
DL_DIR ?= "${TOPDIR}/../../downloads"
SSTATE_DIR ?= "${TOPDIR}/../../sstate-cache"
Enfin, nous lançons un build un petit peu plus complet que le précédent :
[build-rpi4]$ bitbake core-image-base
Une fois l’image produite et disponible dans tmp-glibc/deploy/images/raspberrypi4-64/ sous le nom core-image-base-raspberrypi4-64.rootfs.wic.bz2 on pourra utiliser un outil comme bmaptool pour la flasher sur une carte SD.
Conclusion
Passé le premier moment de surprise face à la disparition de l’outil de démarrage d’un projet avec Yocto que représentait Poky, nous pouvons constater que la situation n’est pas beaucoup plus complexe, il nous suffit globalement de télécharger les repositories de Bitbake et d’Open-Embedded Core, que l’on agrémentera éventuellement du layer meta-yocto (sur le serveur de Yocto Project) pour retrouver la situation précédente.
Je mettrai à jour mes supports de formation dans les semaines à venir et modifierai mon cours en ligne sur Yocto Project lorsque la disparition de Poky aura été finalisée. Nous allons également mettre à jour Yocto Cooker prochainement.
Et si vous cherchez un système plus simple pour produire un environnement Linux embarqué, n’oubliez pas la solution Buildroot.
