{"id":2965,"date":"2012-10-19T02:03:02","date_gmt":"2012-10-19T01:03:02","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=2965"},"modified":"2012-11-30T13:26:39","modified_gmt":"2012-11-30T12:26:39","slug":"toolchain-crosstool-ng-pour-raspberry-pi","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2012\/10\/19\/toolchain-crosstool-ng-pour-raspberry-pi\/","title":{"rendered":"Toolchain crosstool-NG pour Raspberry Pi"},"content":{"rendered":"<p><a href=\"http:\/\/www.blaess.fr\/christophe\/2012\/10\/19\/toolchain-crosstool-ng-pour-raspberry-pi\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-2961\" title=\"Toolchain crosstool-NG pour Raspberry Pi\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/10\/cross-pi1.png\" alt=\"Toolchain crosstool-NG pour Raspberry Pi\" width=\"206\" height=\"150\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">En compl\u00e9ment de l&rsquo;article sur <a title=\"Toolchain Buildroot pour Raspberry Pi\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/10\/12\/toolchain-buildroot-pour-raspberry-pi\/\">la pr\u00e9paration d&rsquo;une toolchain avec Buildroot pour Raspberry Pi<\/a>, et comme Thomas Petazzoni (dont je vous recommande <a title=\"Embedded Linux News\" href=\"http:\/\/www.emlinews.net\/\" target=\"_blank\">le blog<\/a>) l&rsquo;a sugg\u00e9r\u00e9 en commentaire, on peut pr\u00e9f\u00e9rer construire la cha\u00eene de compilation avec <a title=\"crosstool-NG\" href=\"http:\/\/crosstool-ng.org\/\" target=\"_blank\">crosstool-NG<\/a>. Celle-ci offre plusieurs avantages&nbsp;: la toolchain sera relogeable (d\u00e9pla\u00e7able o\u00f9 l&rsquo;on souhaite dans l&rsquo;arborescence sans imposer d&#8217;emplacement absolu) et elle pourra s&rsquo;appuyer sur la biblioth\u00e8que GlibC ou la eGlibC plut\u00f4t que la biblioth\u00e8que uClibC. J&rsquo;ai choisi ici de s\u00e9lectionner la biblioth\u00e8que eGlibC, plus adapt\u00e9e \u00e0 un environnement embarqu\u00e9.<\/p>\n<p style=\"text-align: justify;\">\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">La compilation de crosstool-NG est tr\u00e8s simple, mais elle se fait en deux \u00e9tapes; ce qui la rend un peu d\u00e9routante au premier abord. Il est n\u00e9cessaire de disposer de certains packages qui ne sont pas toujours install\u00e9s par d\u00e9faut sur les distributions classiques. On regardera bien les messages de sortie de la commande <code>configure<\/code> et les \u00e9ventuels messages d&rsquo;erreur en fin de fichier <code>build.log<\/code>.<\/p>\n<p style=\"text-align: justify;\">Voici la liste des packages que j&rsquo;ai d\u00fb rajouter sur une distribution Lubuntu 12.04 tout juste install\u00e9e&nbsp;: <code>make<\/code>, <code>gcc<\/code>, <code>gdb<\/code>, <code>flex<\/code>, <code>bison<\/code>, <code>gperf<\/code>, <code>texinfo<\/code>, <code>gawk<\/code>, <code>libtool<\/code>, <code>automake<\/code>, <code>ncurses-dev<\/code>, <code>subversion<\/code>, <code>g++<\/code>, <code>libexpat1-dev<\/code>.<\/p>\n<h2>T\u00e9l\u00e9chargement et configuration des sources<\/h2>\n<pre>[~]$ <strong>cd Projets\/RaspberryPi\/<\/strong>\n[RaspberryPi]$ <strong>wget http:\/\/crosstool-ng.org\/download\/crosstool-ng\/crosstool-ng-1.16.0.tar.bz2<\/strong>\n--2012-10-15 09:41:22--  http:\/\/crosstool-ng.org\/download\/crosstool-ng\/crosstool-ng-1.16.0.tar.bz2\nR\u00e9solution de crosstool-ng.org (crosstool-ng.org)... 140.211.15.107\nConnexion vers crosstool-ng.org (crosstool-ng.org)|140.211.15.107|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 1957336 (1,9M) [application\/x-bzip]\nSauvegarde en : \u00abcrosstool-ng-1.16.0.tar.bz2\u00bb\n\n100%[===============================================&gt;] 1 957 336    520K\/s   ds 3,7s    \n\n2012-10-15 09:41:26 (520 KB\/s) - \u00abcrosstool-ng-1.16.0.tar.bz2\u00bb sauvegard\u00e9 [1957336\/1957336]\n\n[RaspberryPi]$ <strong>tar xjf crosstool-ng-1.16.0.tar.bz2<\/strong> \n[RaspberryPi]$ <strong>cd crosstool-ng-1.16.0\/<\/strong>\n[crosstool-ng-1.16.0]$ <strong>.\/configure --prefix=\"$PWD\/ctng\"<\/strong>\nchecking build system type... i686-pc-linux-gnu\nchecking host system type... i686-pc-linux-gnu\nchecking for a BSD-compatible install... \/usr\/bin\/install -c\nchecking for grep that handles long lines and -e... \/bin\/grep\nchecking for egrep... \/bin\/grep -E\nchecking for a sed that does not truncate output... \/bin\/sed\n  [...]\n[crosstool-ng-1.16.0]$<\/pre>\n<h2>Pr\u00e9paration du r\u00e9pertoire de compilation<\/h2>\n<p style=\"text-align: justify;\">La premi\u00e8re invocation de <code>make<\/code> va pr\u00e9parer le r\u00e9pertoire de compilation de crosstool-NG. Ici j&rsquo;ai choisi (en argument de <code>.\/configure<\/code>) de travailler dans le sous-r\u00e9pertoire <code>ctng<\/code> du r\u00e9pertoire des sources.<\/p>\n<pre>[crosstool-ng-1.16.0]$ <strong>make<\/strong>\n  SED    'ct-ng'\n  SED    'scripts\/crosstool-NG.sh'\n  SED    'scripts\/saveSample.sh'\n  SED    'scripts\/showTuple.sh'\n  GEN    'config\/configure.in'\n  GEN    'paths.mk'\n  GEN    'paths.sh'\n  DEP    'nconf.gui.dep'\n  DEP    'nconf.dep'\n  DEP    'lxdialog\/yesno.dep'\n  DEP    'lxdialog\/util.dep'\n  DEP    'lxdialog\/textbox.dep'\n  DEP    'lxdialog\/menubox.dep'\n  DEP    'lxdialog\/inputbox.dep'\n  DEP    'lxdialog\/checklist.dep'\n  DEP    'mconf.dep'\n  DEP    'conf.dep'\n  BISON  'zconf.tab.c'\n  GPERF  'zconf.hash.c'\n  LEX    'lex.zconf.c'\n  DEP    'zconf.tab.dep'\n  CC     'zconf.tab.o'\n  CC     'conf.o'\n  LD     'conf'\n  CC     'lxdialog\/checklist.o'\n  CC     'lxdialog\/inputbox.o'\n  CC     'lxdialog\/menubox.o'\n  CC     'lxdialog\/textbox.o'\n  CC     'lxdialog\/util.o'\n  CC     'lxdialog\/yesno.o'\n  CC     'mconf.o'\n  LD     'mconf'\n  CC     'nconf.o'\n  CC     'nconf.gui.o'\n  LD     'nconf'\n  SED    'docs\/ct-ng.1'\n  GZIP   'docs\/ct-ng.1.gz'\n[crosstool-ng-1.16.0]$<strong> make install<\/strong>\n  GEN    'config\/configure.in'\n  GEN    'paths.mk'\n  GEN    'paths.sh'\n  MKDIR   '\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/bin\/'\n  INST    'ct-ng'\n  RMDIR   '\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/lib\/ct-ng.1.16.0\/'\n  MKDIR   '\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/lib\/ct-ng.1.16.0\/'\n  INSTDIR 'config\/'\n  INSTDIR 'contrib\/'\n  INSTDIR 'patches\/'\n  INSTDIR 'scripts\/'\n  INST    'steps.mk'\n  INST    'paths'\n  INSTDIR 'samples\/'\n  INST    'kconfig\/'\n  MKDIR   '\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/share\/doc\/crosstool-ng\/ct-ng.1.16.0\/'\n  INST    'docs\/*.txt'\n  MKDIR   '\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/share\/man\/man1\/'\n  INST    'ct-ng.1.gz'\n\nFor auto-completion, do not forget to install 'ct-ng.comp' into\nyour bash completion directory (usually \/etc\/bash_completion.d)\n[crosstool-ng-1.16.0]$<\/pre>\n<h2>Configuration de la cha\u00eene d\u00e9sir\u00e9e<\/h2>\n<p style=\"text-align: justify;\">Nous pouvons \u00e0 pr\u00e9sent aller dans le sous-r\u00e9pertoire de compilation et y placer un fichier de configuration.<\/p>\n<pre>[crosstool-ng-1.16.0]$ <strong>cd \/ctng\/<\/strong>\n[ctng]$ <strong>PATH=\"$PATH:$PWD\/bin\"<\/strong>\n[ctng]$ <strong>wget http:\/\/www.blaess.fr\/christophe\/files\/article-2012-10-19\/config-ctng<\/strong>\n--2012-10-15 09:57:56--  http:\/\/www.blaess.fr\/christophe\/files\/article-2012-10-19\/config-ctng\n  [...]\n100%[=======================================================&gt;] 10 995      --.-K\/s   ds 0,09s   \n\n2012-10-15 09:57:59 (120 KB\/s) - \u00abconfig-ctng\u00bb sauvegard\u00e9 [10995\/10995]\n\n[ctng]$ <strong>mv config-ctng .config<\/strong>\n[ctng]$ <strong>ct-ng menuconfig<\/strong>\n  CONF  config\/config.in\n[ctng]$<\/pre>\n<p style=\"text-align: justify;\">Nous pouvons nous d\u00e9placer dans les sous-menus pour observer les options de compilation. J&rsquo;ai s\u00e9lectionn\u00e9 un support pour processeur <code>arm1176jzf-s<\/code> (celui du Raspberry Pi) avec FPU <code>vfp<\/code>. J&rsquo;ai choisi un jeu d&rsquo;instructions arithm\u00e9tiques <code>hard<\/code>, mais on peut pr\u00e9f\u00e9rer <code>softfp<\/code> (je r\u00e9aliserai ult\u00e9rieurement des tests pour v\u00e9rifier les avantages\/inconv\u00e9nients de ces choix).<\/p>\n<p style=\"text-align: justify;\">On peut \u00e9galement noter que je n&rsquo;ai pas s\u00e9lectionn\u00e9 la derni\u00e8re version de la eGlibC mais une ant\u00e9rieure (2.13), car le support pour les RPC a \u00e9t\u00e9 supprim\u00e9 des derni\u00e8res moutures et cela pose probl\u00e8me entre autres pour la compilation de Busybox.<\/p>\n<h2>Compilation et installation finale<\/h2>\n<p style=\"text-align: justify;\">Lan\u00e7ons ensuite la compilation. Sa dur\u00e9e varie avec le processeur et la connexion r\u00e9seau entre quelques minutes et une heure environ.<\/p>\n<pre>[ctng]$ <strong>ct-ng build<\/strong>\n[INFO ]  Performing some trivial sanity checks\n[INFO ]  Build started 20121015.100328\n[INFO ]  Building environment variables\n[INFO ]  =================================================================\n[INFO ]  Retrieving needed toolchain components' tarballs\n[INFO ]  Retrieving needed toolchain components' tarballs: done in 299.57s (at 05:02)\n[INFO ]  =================================================================\n[INFO ]  Extracting and patching toolchain components\n[INFO ]  Extracting and patching toolchain components: done in 74.86s (at 06:17)\n[INFO ]  =================================================================\n[INFO ]  Installing GMP for host\n[INFO ]  Installing GMP for host: done in 37.69s (at 06:54)\n[INFO ]  =================================================================\n[INFO ]  Installing MPFR for host\n[INFO ]  Installing MPFR for host: done in 15.40s (at 07:10)\n[INFO ]  =================================================================\n[INFO ]  Installing PPL for host\n[INFO ]  Installing PPL for host: done in 142.78s (at 09:32)\n[INFO ]  =================================================================\n[INFO ]  Installing CLooG\/PPL for host\n[INFO ]  Installing CLooG\/PPL for host: done in 6.86s (at 09:39)\n[INFO ]  =================================================================\n[INFO ]  Installing MPC for host\n[INFO ]  Installing MPC for host: done in 7.83s (at 09:47)\n[INFO ]  =================================================================\n[INFO ]  Installing binutils for host\n[INFO ]  Installing binutils for host: done in 44.18s (at 10:31)\n[INFO ]  =================================================================\n[INFO ]  Installing pass-1 core C compiler\n[INFO ]  Installing pass-1 core C compiler: done in 122.82s (at 12:34)\n[INFO ]  =================================================================\n[INFO ]  Installing kernel headers\n[INFO ]  Installing kernel headers: done in 6.91s (at 12:41)\n[INFO ]  =================================================================\n[INFO ]  Installing C library headers &amp; start files\n[INFO ]  Installing C library headers &amp; start files: done in 28.50s (at 13:10)\n[INFO ]  =================================================================\n[INFO ]  Installing pass-2 core C compiler\n[INFO ]  Installing pass-2 core C compiler: done in 139.85s (at 15:30)\n[INFO ]  =================================================================\n[INFO ]  Installing C library\n[INFO ]  Installing C library: done in 487.29s (at 23:37)\n[INFO ]  =================================================================\n[INFO ]\u00a0 Installing final compiler\n[INFO ]\u00a0 Installing final compiler: done in 223.49s (at 27:20)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Installing libelf for the target\n[INFO ]\u00a0 Installing libelf for the target: done in 6.93s (at 27:27)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Installing dmalloc\n[INFO ]\u00a0 Installing dmalloc: done in 10.70s (at 27:38)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Installing D.U.M.A.\n[INFO ]\u00a0 Installing D.U.M.A.: done in 1.88s (at 27:40)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Installing cross-gdb\n[INFO ]\u00a0 Installing cross-gdb: done in 104.86s (at 29:25)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Installing gdbserver\n[INFO ]\u00a0 Installing gdbserver: done in 7.60s (at 29:32)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Installing ltrace\n[INFO ]\u00a0 Installing ltrace: done in 5.46s (at 29:38)\n[INFO ]\u00a0 =================================================================\n[INFO ]\u00a0 Cleaning-up the toolchain's directory\n[INFO ]\u00a0\u00a0\u00a0 Stripping all toolchain executables\n[INFO ]\u00a0 Cleaning-up the toolchain's directory: done in 2.90s (at 29:41)\n[INFO ]\u00a0 Build completed at 20121015.103309\n[INFO ]\u00a0 (elapsed: 29:40.44)\n[INFO ]\u00a0 Finishing installation (may take a few seconds)...\n[29:41] \/ [ctng]$<\/pre>\n<p style=\"text-align: justify;\">La toolchain est install\u00e9e, nous pouvons supprimer le r\u00e9pertoire de construction et celui des sources.<\/p>\n<pre>[ctng]$ cd ..\/..\n[RaspberryPi]$ rm -rf crosstool-ng-1.16.0<\/pre>\n<h2>Essai de la toolchain<\/h2>\n<p style=\"text-align: justify;\">Premier petit test, le lancement du compilateur \u00e0 vide.<\/p>\n<pre>[RaspberryPi]$<strong> ~\/x-tools\/arm-rpi-linux-gnueabi\/bin\/arm-rpi-linux-gcc -v<\/strong>\nUtilisation des specs internes.\nCOLLECT_GCC=\/home\/cpb\/x-tools\/arm-rpi-linux-gnueabi\/bin\/arm-rpi-gcc\nCOLLECT_LTO_WRAPPER=\/home\/cpb\/x-tools\/arm-rpi-linux-gnueabi\/libexec\/gcc\/arm-rpi-linux-gnueabi\/4.6.3\/lto-wrapper\nTarget: arm-rpi-linux-gnueabi\nConfigur\u00e9 avec: \/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/src\/gcc-4.6.3\/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-rpi-linux-gnueabi --prefix=\/home\/cpb\/x-tools\/arm-rpi-linux-gnueabi --with-sysroot=\/home\/cpb\/x-tools\/arm-rpi-linux-gnueabi\/arm-rpi-linux-gnueabi\/sysroot --enable-languages=c,c++ --with-cpu=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-pkgversion='crosstool-NG 1.16.0 - cpb 2012-10-15' --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools --with-mpfr=\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools --with-mpc=\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools --with-ppl=\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools --with-cloog=\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools --with-libelf=\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm -L\/home\/cpb\/Projets\/RaspberryPi\/crosstool-ng-1.16.0\/ctng\/.build\/arm-rpi-linux-gnueabi\/buildtools\/lib -lpwl' --enable-threads=posix --enable-target-optspace --disable-multilib --with-local-prefix=\/home\/cpb\/x-tools\/arm-rpi-linux-gnueabi\/arm-rpi-linux-gnueabi\/sysroot --enable-c99 --enable-long-long --enable-tls\nMod\u00e8le de thread: posix\ngcc version 4.6.3 (crosstool-NG 1.16.0 - cpb 2012-10-15) \n[RaspberryPi]$<\/pre>\n<p style=\"text-align: justify;\">\u00c0 pr\u00e9sent compilons un fichier <em>hello-world<\/em> en version statique afin que l&rsquo;ex\u00e9cutable ne d\u00e9pende pas des biblioth\u00e8ques partag\u00e9es.<\/p>\n<pre>[RaspberryPi]$ <strong>~\/x-tools\/arm-rpi-linux-gnueabi\/bin\/arm-rpi-gcc -o hello hello.c -static<\/strong>\n[RaspberryPi]$ <strong>file hello<\/strong>\nhello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU\/Linux 3.5.0, not stripped\n[RaspberryPi]$<\/pre>\n<p style=\"text-align: justify;\">Parfait. Testons-le sur le Raspberry en l&rsquo;envoyant par le r\u00e9seau.<\/p>\n<pre>[RaspberryPi]$ <strong>scp hello root@192.168.5.28:\/tmp <\/strong>\nroot@192.168.5.28's password: \nhello                                100%  573KB 572.9KB\/s   00:00    \n[RaspberryPi]$ <strong>ssh root@192.168.5.28 \/tmp\/hello<\/strong>\nroot@192.168.5.28's password: \nHello from the crosstool-NG new compiler\n[RaspberryPi]$<\/pre>\n<p style=\"text-align: justify;\">Pour valider le fonctionnement avec les biblioth\u00e8ques partag\u00e9es, il faut installer ces derni\u00e8res sur le Raspberry Pi. Comme je pr\u00e9f\u00e8re \u00e9viter les confusions entre les biblioth\u00e8ques issues de la eGlibC compil\u00e9e avec crosstool-NG et celles provenant de la uClibC compil\u00e9e par Buildroot, j&rsquo;ai pr\u00e9f\u00e9r\u00e9 reconstruire rapidement un syst\u00e8me de fichiers avec Busybox et Dropbear.<br \/>\nVoici un exemple apr\u00e8s red\u00e9marrage du Raspberry Pi sur le nouveau syst\u00e8me.<\/p>\n<pre>[RaspberryPi]$ <strong>ssh root@192.168.5.28<\/strong>\nroot@192.168.5.28's password: \nroot@R-Pi [\/root]# <strong>uname -a<\/strong>\nLinux R-Pi 3.1.9-glmf #22 PREEMPT Fri Aug 17 16:59:34 CEST 2012 armv6l GNU\/Linux\nroot@R-Pi [\/root]# <strong>\/lib\/libc.so.6 <\/strong>\nGNU C Library (crosstool-NG 1.16.0 - cpb 2012-10-15) stable release version 2.13, by Roland McGrath et al.\nCopyright (C) 2011 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions.\nThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\nPARTICULAR PURPOSE.\nCompiled by GNU CC version 4.6.3.\nCompiled on a Linux 3.0.39 system on 2012-10-19.\nAvailable extensions:\n\tcrypt add-on version 2.1 by Michael Glad and others\n\tNative POSIX Threads Library by Ulrich Drepper et al\n\tSupport for some architectures added on, not maintained in glibc core.\n\tBIND-8.2.3-T5B\nlibc ABIs: UNIQUE\nFor bug reporting instructions, please see:\n&lt;http:\/\/www.eglibc.org\/issues\/&gt;.\nroot@R-Pi [\/root]# <strong>\/tmp\/hello-shared <\/strong>\nHello from the crosstool-NG new compiler\nroot@R-Pi [\/root]#<\/pre>","protected":false},"excerpt":{"rendered":"<p>En compl&eacute;ment de l&rsquo;article sur la pr&eacute;paration d&rsquo;une toolchain avec Buildroot pour Raspberry Pi, et comme Thomas Petazzoni (dont je vous recommande le blog) l&rsquo;a sugg&eacute;r&eacute; en commentaire, on peut pr&eacute;f&eacute;rer construire la cha&icirc;ne de compilation avec crosstool-NG. Celle-ci offre plusieurs avantages&nbsp;: la toolchain sera relogeable (d&eacute;pla&ccedil;able o&ugrave; l&rsquo;on souhaite dans l&rsquo;arborescence sans imposer d&rsquo;emplacement [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,10,11],"tags":[],"class_list":["post-2965","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-microprocesseur","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2965","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=2965"}],"version-history":[{"count":1,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2965\/revisions"}],"predecessor-version":[{"id":3220,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2965\/revisions\/3220"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=2965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=2965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=2965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}