{"id":7035,"date":"2025-11-11T08:21:22","date_gmt":"2025-11-11T07:21:22","guid":{"rendered":"https:\/\/www.blaess.fr\/christophe\/?p=7035"},"modified":"2025-11-11T13:11:35","modified_gmt":"2025-11-11T12:11:35","slug":"se-passer-de-poky","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2025\/11\/11\/se-passer-de-poky\/","title":{"rendered":"Se passer de Poky"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><a href=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2025\/11\/no-poky.png\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"157\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2025\/11\/no-poky.png\" alt=\"\" class=\"wp-image-7045\"\/><\/a><\/figure><\/div>\n\n\n<p>L&rsquo;\u00e9co-syst\u00e8me \u00ab\u00a0<em>The Yocto Project<\/em>\u00a0\u00bb est assez touffu. En effet, Yocto Project chapeaute plusieurs sous-projets pour lesquels il fournit des ressources de d\u00e9veloppement&nbsp;: Bitbake, Open Embedded, Poky, les <em>layers<\/em> des sponsors \u00ab\u00a0<em>platiniums<\/em>\u00a0\u00bb ainsi que l&rsquo;h\u00e9bergement de nombreux <em>layers<\/em> supportant diverses plateformes mat\u00e9rielles.<\/p>\n\n\n\n<p>Depuis plus d&rsquo;une d\u00e9cennie, la mise en route d&rsquo;un projet Yocto passait par l&rsquo;utilisation d&rsquo;un <em>starter pack<\/em> contenant les outils de base et les recettes minimales pour produire une image. Cet environnement se nommait <strong>Poky<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Poky \u00e9tait bien pratique pour s&rsquo;assurer d&rsquo;une mise en \u0153uvre initiale correcte, et toutes mes sessions de formation et tutoriels sur Yocto commen\u00e7aient syst\u00e9matique par un&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git  clone  git:\/\/git.yoctoproject.org\/poky  -b  &lt;current-branch&gt;<\/code><\/pre>\n\n\n\n<p>Toutefois les mainteneurs de Yocto Project ont pris la d\u00e9cision de <strong>ne plus maintenir<\/strong> Poky \u00e0 partir de la future branche <em>Wrynose<\/em> d&rsquo;Avril prochain. Leur objectif&nbsp;: favoriser l&rsquo;utilisation d&rsquo;un outil nomm\u00e9 <code>bitbake-setup<\/code> qui peut s&rsquo;occuper de la mise en \u0153uvre de l&rsquo;environnement de travail.<\/p>\n\n\n\n<p>\u00c0 titre personnel cela ne m&rsquo;enchante gu\u00e8re car <code>bitbake-setup<\/code> est un concurrent de l&rsquo;outil <strong>Yocto Cooker<\/strong> auquel j&rsquo;ai contribu\u00e9 et que j&rsquo;ai pr\u00e9sent\u00e9 dans <a href=\"https:\/\/www.blaess.fr\/christophe\/2022\/01\/13\/yocto-cooker-1-3\/\" data-type=\"post\" data-id=\"5897\">plusieurs articles ici<\/a>.  De plus Yocto Cooker dispose de fonctionnalit\u00e9s suppl\u00e9mentaires que j&rsquo;estime importantes.<\/p>\n\n\n\n<p>En attendant que Yocto Cooker soit pr\u00eat \u00e0 se passer de Poky (ce qui ne saurait tarder). Je vous pr\u00e9sente ici la m\u00e9thode manuelle que j&#8217;emploie pour construire l&rsquo;environnement de travail et faire un <em>build<\/em> simple sans utiliser Poky.<\/p>\n\n\n\n<p>Commen\u00e7ons par nous cr\u00e9er un r\u00e9pertoire pour accueillir les <em>layers<\/em> et un autre pour les futurs <em>builds<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;no-poky]$ <strong>mkdir layers<\/strong>\n&#91;no-poky]$ <strong>mkdir builds<\/strong><\/code><\/pre>\n\n\n\n<p>T\u00e9l\u00e9chargeons, dans le sous-dossier <code>layers<\/code> deux d\u00e9p\u00f4ts <code>git<\/code> : celui de <code>bitbake<\/code> (l&rsquo;outil de construction utilis\u00e9 dans le projet Yocto) et celui de <code>openembedded-core<\/code> (le <em>layer<\/em> contenant les recettes de base pour construire une image)&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;no-poky]$ <strong>cd  layers\/<\/strong>\n&#91;layers]$ <strong>git  clone  git:\/\/git.openembedded.org\/bitbake<\/strong>\n&#91;layers]$ <strong>cd bitbake<\/strong>\n&#91;bitbake]$ <strong>git  checkout  yocto-5.0.13<\/strong>\n&#91;bitbake]$ <strong>cd  ..<\/strong>\n&#91;layers]$ <strong>git  clone  git:\/\/git.openembedded.org\/openembedded-core  -b scarthgap<\/strong>\n&#91;layers]$ <strong>cd ..<\/strong>\n&#91;no-poky]$ \n<\/code><\/pre>\n\n\n\n<p>Il est important que ces deux r\u00e9pertoires soient c\u00f4te-\u00e0-c\u00f4te dans l&rsquo;arborescence, le script <code>oe-init-build-env<\/code> que nous allons appeler se trouve dans <code>openembedded-code<\/code> et recherche <code>bitbake<\/code> dans le r\u00e9pertoire se trouvant \u00e0 c\u00f4t\u00e9 de lui.<\/p>\n\n\n\n<p>\u00ab\u00a0Sour\u00e7ons\u00a0\u00bb le script pour qu&rsquo;il puisse cr\u00e9er notre dossier de <em>build<\/em>, et qu&rsquo;il configure les variables d&rsquo;environnement du shell n\u00e9cessaires.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;no-poky]$ <strong>source  layers\/openembedded-core\/oe-init-build-env  builds\/build-qemu<\/strong>\n   &#91;...]\n&#91;build-qemu]$ <\/code><\/pre>\n\n\n\n<p>J&rsquo;aime bien \u00e9diter le fichier  <code>conf\/local.conf<\/code>, pour d\u00e9-commenter et compl\u00e9ter les deux lignes suivantes afin que les dossiers <code>downloads<\/code> et <code>sstate-cache<\/code> soient partag\u00e9s entre mes diff\u00e9rents <em>builds<\/em>. Ce n&rsquo;est pas indispensable, mais c&rsquo;est une bonne pratique.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DL_DIR ?= \"${TOPDIR}\/<strong>..\/..\/<\/strong>downloads\"\n  &#91;...]\nSSTATE_DIR ?= \"${TOPDIR}\/<strong>..\/..\/<\/strong>sstate-cache\"\n<\/code><\/pre>\n\n\n\n<p>Enfin, nous pouvons lancer un build minimal. Par d\u00e9faut il s&rsquo;agira d&rsquo;une \u00e9mulation de machine x86_64 par Qemu&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;build-qemu]$ <strong>bitbake core-image-minimal<\/strong><\/code><\/pre>\n\n\n\n<p>Patientons quelques dizaines de minutes et testons le r\u00e9sultat&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;build-qemu]$ <strong>runqemu  nographic<\/strong>\n  &#91;...]\n\nOpenEmbedded nodistro.0 qemux86-64 \/dev\/ttyS0\n\nqemux86-64 login: <strong>root<\/strong>\nroot@qemux86-64:~# <strong>uname -a<\/strong>\nLinux qemux86-64 6.6.111-yocto-standard #1 SMP PREEMPT_DYNAMIC Tue Oct 14 01:25:53 UTC 2025 x86_64 GNU\/Linux\nroot@qemux86-64:~# \n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Raspberry Pi<\/h2>\n\n\n\n<p>Si l&rsquo;on souhaite faire une image pour une vraie carte et non plus une \u00e9mulation, il va falloir charger les recettes qui la concernent. Elle sont regroup\u00e9s dans diff\u00e9rents layers, dont bon nombre sont h\u00e9berg\u00e9s sur les serveurs de Yocto Project. Prenons par exemple un Raspberry Pi 4&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;no-poky]$ <strong>cd  layers<\/strong>\n&#91;layers]$ <strong>git  clone  git:\/\/git.yoctoproject.org\/meta-raspberrypi  -b scarthgap<\/strong>\n&#91;layers]$ <strong>cd  ..<\/strong>\n&#91;no-poky]$ <strong>source  .\/layers\/openembedded-core\/oe-init-build-env  builds\/build-rpi4<\/strong>\n&#91;build-rpi4]$<\/code><\/pre>\n\n\n\n<p>Avant de lancer la compilation, il faut penser \u00e0 ajouter le layer <code>meta-raspberrypi<\/code> \u00e0 la liste des layers pris en compte&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;build-rpi4]$ <strong>bitbake-layers  add-layer  ..\/..\/layers\/meta-raspberrypi\/<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Puis nous configurons le fichier <code>local.conf<\/code> en ajoutant les lignes suivantes  :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MACHINE = \"raspberrypi4-64\"\nENABLE_UART = \"1\"\nLICENSE_FLAGS_ACCEPTED += \"synaptics-killswitch\"\nDL_DIR ?= \"${TOPDIR}\/..\/..\/downloads\"\nSSTATE_DIR ?= \"${TOPDIR}\/..\/..\/sstate-cache\"<\/code><\/pre>\n\n\n\n<p>Enfin, nous lan\u00e7ons un <em>build<\/em> un petit peu plus complet que le pr\u00e9c\u00e9dent&nbsp;: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;build-rpi4]$ <strong>bitbake core-image-base<\/strong><\/code><\/pre>\n\n\n\n<p>Une fois l&rsquo;image produite et disponible dans <code>tmp-glibc\/deploy\/images\/raspberrypi4-64\/<\/code> sous le nom <code>core-image-base-raspberrypi4-64.rootfs.wic.bz2<\/code> on pourra utiliser un outil comme <code>bmaptool<\/code> pour la <em>flasher<\/em> sur une carte SD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Pass\u00e9 le premier moment de surprise face \u00e0 la disparition de l&rsquo;outil de d\u00e9marrage d&rsquo;un projet avec Yocto que repr\u00e9sentait Poky, nous pouvons constater que la situation n&rsquo;est pas beaucoup plus complexe, il nous suffit globalement de t\u00e9l\u00e9charger les <em>repositories<\/em> de <strong>Bitbake<\/strong> et d&rsquo;<strong>Open-Embedded Core<\/strong>, que l&rsquo;on agr\u00e9mentera \u00e9ventuellement du layer <code><strong>meta-yocto<\/strong><\/code> (sur le <a href=\"git:\/\/git.yoctoproject.org\/\">serveur de Yocto Project<\/a>) pour retrouver la situation pr\u00e9c\u00e9dente.<\/p>\n\n\n\n<p>Je mettrai \u00e0 jour mes supports de formation dans les semaines \u00e0 venir et modifierai <a href=\"https:\/\/www.blaess.fr\/christophe\/yocto-lab\"><strong>mon cours en ligne<\/strong> sur Yocto Project<\/a> lorsque la disparition de Poky aura \u00e9t\u00e9 finalis\u00e9e. Nous allons \u00e9galement mettre \u00e0 jour <a href=\"https:\/\/www.blaess.fr\/christophe\/2022\/01\/13\/yocto-cooker-1-3\/\" data-type=\"post\" data-id=\"5897\"><strong>Yocto Cooker<\/strong><\/a> prochainement.<br><br>Et si vous cherchez un syst\u00e8me plus simple pour produire un environnement Linux embarqu\u00e9, n&rsquo;oubliez pas la <a href=\"https:\/\/www.blaess.fr\/christophe\/buildroot-lab\/index.html\">solution <strong>Buildroot<\/strong><\/a>.<\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>L&rsquo;&eacute;co-syst&egrave;me &laquo;&nbsp;The Yocto Project&nbsp;&raquo; est assez touffu. En effet, Yocto Project chapeaute plusieurs sous-projets pour lesquels il fournit des ressources de d&eacute;veloppement&nbsp;: Bitbake, Open Embedded, Poky, les layers des sponsors &laquo;&nbsp;platiniums&nbsp;&raquo; ainsi que l&rsquo;h&eacute;bergement de nombreux layers supportant diverses plateformes mat&eacute;rielles. Depuis plus d&rsquo;une d&eacute;cennie, la mise en route d&rsquo;un projet Yocto passait par l&rsquo;utilisation [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-7035","post","type-post","status-publish","format-standard","hentry","category-linux-2"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/7035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=7035"}],"version-history":[{"count":16,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/7035\/revisions"}],"predecessor-version":[{"id":7063,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/7035\/revisions\/7063"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=7035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=7035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=7035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}