{"id":2621,"date":"2026-07-17T09:59:27","date_gmt":"2026-07-17T07:59:27","guid":{"rendered":"https:\/\/www.fabienm.eu\/wordpress\/?p=2621"},"modified":"2026-07-17T10:15:16","modified_gmt":"2026-07-17T08:15:16","slug":"quilt-pour-tripoter-les-patches-dun-paquet-buildroot","status":"publish","type":"post","link":"https:\/\/www.fabienm.eu\/wordpress\/2026\/07\/17\/quilt-pour-tripoter-les-patches-dun-paquet-buildroot\/","title":{"rendered":"Quilt : Pour tripoter les patches d&rsquo;un paquet buildroot."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/buildroot.org\/\">Buildroot<\/a> t\u00e9l\u00e9charge les sources officielles des logiciels pour ensuite les modifier avec des patches inclus dans le paquet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si on prend l&rsquo;exemple du paquet <a href=\"https:\/\/gitlab.com\/buildroot.org\/buildroot\/-\/tree\/master\/boot\/uboot?ref_type=heads\">uboot<\/a>. Pour le compiler on fait simplement un :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ make uboot<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u00c0 la racine de buildroot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette r\u00e8gle g\u00e9n\u00e9rale cache en fait tout un tas d&rsquo;\u00e9tapes de constructions visibles par les timbres (<code>.stamp<\/code>) dans le r\u00e9pertoire build&nbsp;:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ cd output\/build\/uboot-VERSION\/\n$ ls -l\n.stamp_downloaded\n.stamp_extracted\n.stamp_patched\n.stamp_dotconfig\n.stamp_kconfig_fixup_done\n.stamp_configured\n.stamp_built\n.stamp_target_installed\n.stamp_images_installed\n.stamp_installed<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Les fichiers .stamp ont \u00e9t\u00e9 ici mis dans l&rsquo;ordre d\u2019ex\u00e9cution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Extraction du paquet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;\u00e9tape qui nous int\u00e9resse pr\u00e9sentement est <code>.stamp_patched<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour pouvoir \u00e9diter les patches \u00e0 la main il va nous falloir faire cette \u00e9tape \u00e0 la main.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tout d&rsquo;abord on t\u00e9l\u00e9charge et extrait le paquet avec buildroot :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">make uboot-extract<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Notez que si votre paquet est d\u00e9j\u00e0 compil\u00e9 il faudra faire table rase avec un :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">make uboot-dirclean<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Ce qui aura pour effet de supprimer le r\u00e9pertoire <code>output\/build\/uboot-VERSION<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Buildroot va passer toute les \u00e9tapes pr\u00e9c\u00e9dentes (t\u00e9l\u00e9chargement, d\u00e9compression) et s&rsquo;arr\u00eater juste avant les patches. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Patchons avec quilt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour patcher \u00e0 la main il faut d&rsquo;abord se rendre dans le r\u00e9pertoire de build du paquet fraichement cr\u00e9\u00e9 puis importer les patch avec quilt.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code lang=\"\" class=\"hljs language-javascript \">$ quilt <span class=\"hljs-keyword\">import<\/span> ..\/..\/..\/..\/br-external-oposa5e-sp\/boot\/uboot\/patches<span class=\"hljs-comment\">\/*.patch<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Ici les patches proviennent d&rsquo;un br-external, mais  c&rsquo;est <a href=\"https:\/\/www.buildroot.org\/downloads\/manual\/customize-outside-br.txt\">une autre histoire<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La commande <code>import<\/code> a pour effet de copier les patches dans un r\u00e9pertoire <code>patches\/<\/code> et ajoute un fichier texte nomm\u00e9 <code>series<\/code> qui les liste.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 cette \u00e9tape, les patches ne sont pas encore appliqu\u00e9s. Il faut pour cela les pousser avec la commande <code>quilt push<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si l&rsquo;on souhaite appliquer d&rsquo;un coup tous les patches de la s\u00e9rie on utilisera l&rsquo;option<code> -a<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ quilt push -a\nApplying patch patches\/0001-oposa5esp-065b-devicetree.patch\npatching file arch\/arm\/dts\/oposa5e_sp_065b.dts\npatching file configs\/oposa5e_sp_065b_defconfig\npatching file arch\/arm\/dts\/oposa5e_sp_065b-u-boot.dtsi\n\nNow at patch patches\/0001-oposa5esp-065b-devicetree.patch\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Pour le coup ici il n&rsquo;y a qu&rsquo;un patch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous souhaitez ajouter des patches utilisez <code>new<\/code> et pour ajouter des fichiers \u00e0 modifier utiliser <code>add<\/code> <strong>avant<\/strong> de modifier le fichier. Tout ceci est tr\u00e8s bien expliqu\u00e9 dans<a href=\"https:\/\/linux.die.net\/man\/1\/quilt\"> la page man<\/a> et n&rsquo;est pas le sujet de ce billet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Continuer le build du paquet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que nous avons patch\u00e9 \u00e0 la main il faut le dire \u00e0 buildroot en ajoutant le timbre :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ touch .stamp_patched<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Puis on retourne dans le r\u00e9pertoire principal de buildroot pour finir la construction du paquet.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ cd ..\/..\/..\/\n$ make uboot<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Modification d&rsquo;un patch une fois le paquet construit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour revenir \u00e0 l&rsquo;\u00e9tape de modification des patches on supprime tous les timbres correspondant aux \u00e9tapes d&rsquo;apr\u00e8s <code>.stamp_patched<\/code> .<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ rm .stamp_*\n$ touch .stamp_downloaded .stamp_extracted .stamp_patched<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Puis on remet son quilt pour tripoter les patches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ressources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les sources de <a href=\"https:\/\/savannah.nongnu.org\/projects\/quilt\">quilt<\/a>.<\/li>\n\n\n\n<li>Ruzito a cr\u00e9\u00e9 <a href=\"https:\/\/github.com\/ruzito\/QuiltCheatsheet\">un pense b\u00eate pour les commandes quilt <\/a>sur github.<\/li>\n\n\n\n<li>\u00c0 peu pr\u00e8s<a href=\"https:\/\/blog.rishavs.in\/posts\/generating-package-patch-for-buildroot\/\"> le m\u00eame article mais en anglais<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/buildroot.org\/\">Page officielle<\/a> de buildroot<\/li>\n\n\n\n<li><a href=\"https:\/\/www.opossom.com\/en\/product-oposa5esp\/index.html\">oposa5e_sp<\/a> le SoM qui m&rsquo;a permis de faire ce tuto.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Buildroot t\u00e9l\u00e9charge les sources officielles des logiciels pour ensuite les modifier avec des patches inclus dans le paquet. Si on prend l&rsquo;exemple du paquet uboot. Pour le compiler on fait simplement un : \u00c0 la racine de buildroot. Cette r\u00e8gle &hellip; <a href=\"https:\/\/www.fabienm.eu\/wordpress\/2026\/07\/17\/quilt-pour-tripoter-les-patches-dun-paquet-buildroot\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[106,10,1,11],"tags":[413,111,174,19,412,414,411,403],"class_list":["post-2621","post","type-post","status-publish","format-standard","hentry","category-embarque","category-informatique","category-non-classe","category-programmation","tag-autotool","tag-buildroot","tag-embarque","tag-linux","tag-paquet","tag-patches","tag-quilt","tag-uboot"],"_links":{"self":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/2621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=2621"}],"version-history":[{"count":13,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/2621\/revisions"}],"predecessor-version":[{"id":2638,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/2621\/revisions\/2638"}],"wp:attachment":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=2621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=2621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=2621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}