{"id":594,"date":"2011-05-06T14:00:00","date_gmt":"2011-05-06T13:00:00","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=594"},"modified":"2011-05-06T14:00:00","modified_gmt":"2011-05-06T13:00:00","slug":"construire-son-systeme-personnel-sur-une-carte-pandaboard","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/05\/06\/construire-son-systeme-personnel-sur-une-carte-pandaboard\/","title":{"rendered":"Construire son syst\u00e8me personnel sur une carte Pandaboard (1)"},"content":{"rendered":"<p style=\"text-align: justify;\">J&rsquo;ai enfin trouv\u00e9 le temps de faire un essai d&rsquo;installation d&rsquo;un syst\u00e8me totalement personnalis\u00e9 (tr\u00e8s incomplet pour le moment) sur ma carte Pandaboard re\u00e7ue depuis quelques semaines.<img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-598\" title=\"Panda Board\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/Pandaboard-01.jpg\" alt=\"Panda Board\" width=\"150\" height=\"101\" \/><\/p>\n<p>\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">Rappelons que la Pandaboard est une carte, disponible depuis l&rsquo;automne dernier, dont les performances all\u00e9chantes font un terrain de jeu r\u00eav\u00e9 pour le d\u00e9veloppeur Linux embarqu\u00e9. On peut la commander chez <a title=\"http:\/\/www.digikey.com\/us\/en\/ph\/texas-instruments\/pandaboard.html\" href=\"http:\/\/www.digikey.com\/us\/en\/ph\/texas-instruments\/pandaboard.html\" target=\"_blank\">Digikey<\/a> aux \u00c9tats-Unix pour 174&nbsp;$ auxquels s&rsquo;ajoutent des frais de livraisons et environ 40&nbsp;\u20ac de frais de douane. Depuis peu un distributeur la propose \u00e9galement depuis l&rsquo;Allemagne&nbsp;: <a title=\"http:\/\/www.watterott.com\/\" href=\"http:\/\/www.watterott.com\/\" target=\"_blank\">Watterott Electronic<\/a> pour environ 160&nbsp;\u20ac (plus les frais de port).<\/p>\n<p style=\"text-align: justify;\">Le processeur est un OMAP 4 (Texas Instruments) contenant deux coeurs Cortex A9 cadenc\u00e9s \u00e0 1 GHz chacun. Cette carte dispose d&rsquo;un gigaoctet de m\u00e9moire, d&rsquo;une sortie <em>full-HD<\/em> 1080p, d&rsquo;une connectivit\u00e9 USB, Ethernet, s\u00e9rie RS\/232, audio in\/out, etc.<\/p>\n<p style=\"text-align: justify;\">Il est possible de t\u00e9l\u00e9charger des images de Linux pr\u00eates \u00e0 booter, tant en version r\u00e9duite (minimum d&rsquo;utilitaires syst\u00e8mes) que sous forme enrichie de distribution Ubuntu ajust\u00e9e.<\/p>\n<p style=\"text-align: justify;\">Toutefois, ce qui m&rsquo;int\u00e9resse dans cet article est de pouvoir construire un environnement minimal \u00ab\u00a0<em>from scratch\u00a0\u00bb<\/em> en compilant manuellement tous les composants du syst\u00e8me.<\/p>\n<p style=\"text-align: justify;\">Dans ce premier article nous allons nous int\u00e9resser au boot de la carte. Nous devrons donc compiler et installer un <em>bootloader<\/em>, dont le r\u00f4le sera de trouver une image du noyau Linux (que nous compilerons \u00e9galement), de la placer en m\u00e9moire et de lui passer le contr\u00f4le.<\/p>\n<h2>Compilation du <em>bootloader<\/em><\/h2>\n<p style=\"text-align: justify;\">Tout d&rsquo;abord nous devons compiler le <em>bootloader<\/em> supportant les processeurs Texas Instruments&nbsp;: X-loader qui devra \u00e0 son tour charger le <em>bootloader<\/em> de niveau sup\u00e9rieur&nbsp;: U-boot.<\/p>\n<p style=\"text-align: justify;\">T\u00e9l\u00e9chargeons une copie des sources de X-loader&nbsp;:<\/p>\n<pre>[~]$ <strong>mkdir ~\/Projets\/Panda<\/strong>\n[~]$ <strong>cd ~\/Projets\/Panda\/<\/strong>\n[Panda]$ <strong>git clone git:\/\/gitorious.org\/x-loader\/x-loader.git<\/strong>\nCloning into x-loader...\n[...]\nResolving deltas: 100% (1475\/1475), done.\n[Panda]$ <strong>cd x-loader\/<\/strong><\/pre>\n<p style=\"text-align: justify;\">Pr\u00e9parons la configuration de X-loader &#8211; il existe d\u00e9j\u00e0 une commande de configuration propre \u00e0 notre carte&nbsp;:<\/p>\n<pre>[x-loader]$ <strong>make omap4430panda_config<\/strong>\nrm -f include\/config.h include\/config.mk\nConfiguring for omap4430panda board...\n$<\/pre>\n<p>Puis d\u00e9marrons la compilation<\/p>\n<pre>[x-loader]$ <strong>make CROSS_COMPILE=\/cross-arm-linux\/usr\/bin\/arm-linux- ift<\/strong>\n[...]\n.\/signGP x-load.bin 0x40304350 1\nwarning: fclose: Success\nwarning: fclose: Success\ncp x-load.bin.ift MLO\n[x-loader]$<\/pre>\n<p style=\"text-align: justify;\">La cha\u00eene de compilation dont nous indiquons le pr\u00e9fixe dans l&rsquo;option <em>CROSS_COMPILE<\/em> doit \u00eatre install\u00e9e au pr\u00e9alable. Si vous souhaitez compiler vous-m\u00eame votre cha\u00eene de compilation crois\u00e9e, vous pouvez vous r\u00e9f\u00e9rer \u00e0 <a title=\"http:\/\/www.logilin.fr\/article.php?ref=003\" href=\"http:\/\/www.logilin.fr\/article.php?ref=003\">cet article<\/a>.<\/p>\n<p style=\"text-align: justify;\">La deuxi\u00e8me \u00e9tape consiste \u00e0 g\u00e9n\u00e9rer le <em>bootloader<\/em> de second niveau&nbsp;: U-boot. T\u00e9l\u00e9chargeons les sources&nbsp;:<\/p>\n<pre>[x-loader]$ <strong>cd ~\/Projets\/Panda\/<\/strong>\n[Panda]$ <strong>git clone git:\/\/git.denx.de\/u-boot.git<\/strong>\nCloning into u-boot...\n[...]\nResolving deltas: 100% (115879\/115879), done.\n[Panda]$ <strong>cd u-boot\/<\/strong>\n[u-boot]$<\/pre>\n<p>Depuis le noyau 2.6.37, les ports s\u00e9ries de l&rsquo;OMAP 4 ont \u00e9t\u00e9 renomm\u00e9s de <code>ttyS<\/code>xx en <code>ttyO<\/code>xx (avec la lettre <code>O<\/code>, pas un z\u00e9ro). Toutefois ceci n&rsquo;a pas \u00e9t\u00e9 corrig\u00e9 imm\u00e9diatement dans U-boot. Si vous compilez une ancienne version de ce bootloader, il vous faut \u00e9diter le fichier <code>include\/configs\/omap4_panda.h<\/code> et rechercher la ligne<\/p>\n<pre>        \"console=tty<strong>S<\/strong>2,115200n8\u0000\" <\/pre>\n<p style=\"text-align: justify;\">pour la remplacer par<\/p>\n<pre>        \"console=tty<strong>O<\/strong>2,115200n8\u0000\" <\/pre>\n<p style=\"text-align: justify;\">Mais cette modification n&rsquo;est pas n\u00e9cessaire dans les versions \u00e0 jour.<\/p>\n<p style=\"text-align: justify;\">Pr\u00e9parons la compilation de U-boot, en utilisant la configuration existante&nbsp;:<\/p>\n<pre>[u-boot]$ <strong>make omap4_panda_config<\/strong>\nawk '(NF &amp;&amp; $1 !~ \/^#\/) { print $1 \": \" $1 \"_config; $(MAKE)\" }' boards.cfg &gt; .boards.depend\nConfiguring for omap4_panda board...\n[u-boot]$<\/pre>\n<p style=\"text-align: justify;\">Puis lan\u00e7ons la compilation de U-boot<\/p>\n<pre>[u-boot]$ <strong>make CROSS_COMPILE=\/cross-arm-linux\/usr\/bin\/arm-linux- <\/strong>\n[...]\n\/cross-arm-linux\/usr\/bin\/arm-linux-objcopy -O srec u-boot u-boot.srec\n\/cross-arm-linux\/usr\/bin\/arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin\n[u-boot]$<\/pre>\n<h2 style=\"text-align: justify;\">Compilation du noyau Linux<\/h2>\n<p style=\"text-align: justify;\">J&rsquo;ai choisi de travailler avec la derni\u00e8re version \u00ab\u00a0Release Candidate\u00a0\u00bb de Linux 2.6.39, le noyau (presque) stable le plus r\u00e9cent disponible \u00e0 ce jour. Toutefois les proc\u00e9dures ci-dessous devraient fonctionner pour n&rsquo;importe quel noyau 2.6 des derni\u00e8res versions. Attention toutefois \u00e0 ne pas renommer <code>ttyS2<\/code> en <code>ttyO2<\/code> comme nous l&rsquo;avons fait ci-dessus si vous choisissez un noyau ant\u00e9rieur au 2.6.37.<\/p>\n<pre>[u-boot]$ <strong>cd ~\/Projets\/Panda\/<\/strong>\n[Panda]$ <strong>wget\u00a0http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/testing\/linux-2.6.39-rc5.tar.bz2<\/strong>\n[Panda$ <strong>tar -xjf linux-2.6.39-rc5.tar.bz2<\/strong><\/pre>\n<p style=\"text-align: justify;\">Copions le fichier de configuration\u00a0<a title=\"config-linux-2.6.39-rc5-pandaboard-cpb\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-06\/config-linux-2.6.39-rc5-pandaboard-cpb\">config-linux-2.6.39-rc5-pandaboard-cpb<\/a> (\u00e0 t\u00e9l\u00e9charger au pr\u00e9alable).<\/p>\n<pre>[Panda]$ <strong>cd linux-2.6.39.5<\/strong>\n[linux-2.6.39.5]$ <strong>cp ~\/config-linux-2.6.39-rc5-pandaboard-cpb \u00a0.\/.config<\/strong><\/pre>\n<p style=\"text-align: justify;\">V\u00e9rifions la configuration du noyau<\/p>\n<pre>[linux-2.6.39.5]$ <strong>make ARCH=arm menuconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">Puis lan\u00e7ons la compilation&nbsp;:<\/p>\n<pre>[linux-2.6.39.5]$ <strong>PATH=$PATH:..\/u-boot\/tools\/<\/strong>\n[linux-2.6.39.5]$ <strong>make ARCH=arm CROSS_COMPILE=\/cross-arm-linux\/usr\/bin\/arm-linux- -j 16 uImage<\/strong>\n[...]\nImage Type:   ARM Linux Kernel Image (uncompressed)\nData Size:    3060584 Bytes = 2988.85 kB = 2.92 MB\nLoad Address: 80008000\nEntry Point:  80008000\nImage arch\/arm\/boot\/uImage is ready\n[linux-2.6.39.5]$<\/pre>\n<p style=\"text-align: justify;\">La modification de la variable d&rsquo;environnement <code>PATH<\/code> a pour but d&rsquo;ajouter un r\u00e9pertoire dans la liste de ceux que le syst\u00e8me parcourt lorsqu&rsquo;il recherche une commande. Ici nous avons besoin (pour obtenir une <code>uImage<\/code> adapt\u00e9e pour U-boot) de la commande <code>mkimage<\/code>. Celle-ci n&rsquo;est g\u00e9n\u00e9ralement pas livr\u00e9e par les distributions. Toutefois elle est fournie avec U-boot et devient donc disponible pour compiler le noyau.<\/p>\n<p style=\"text-align: justify;\">\n<h2>Pr\u00e9paration de la carte Micro-SD<\/h2>\n<p style=\"text-align: justify;\">Le formatage de la carte flash Micro-SD sur laquelle nous allons booter est assez sensible.\u00a0Ins\u00e9rez la carte Micro-SD sur votre poste h\u00f4te. Sur ma machine, la carte est reconnue comme <code>\/dev\/sdf<\/code> et sa partition <code>\/dev\/sdf1<\/code> est mont\u00e9e automatiquement dans <code>\/media\/<\/code>xxxx (un num\u00e9ro de s\u00e9rie).<\/p>\n<p style=\"text-align: justify;\">Vous devrez v\u00e9rifier (avec <code>dmesg<\/code>) sur <strong>votre<\/strong> syst\u00e8me, quel p\u00e9riph\u00e9rique repr\u00e9sente la carte micro-SD et remplacer toutes les occurrences de <code>\/dev\/sdf<\/code> ci-dessous par le p\u00e9riph\u00e9rique vous concernant.\u00a0Les commandes suivantes sont <strong>dangereuses<\/strong>, relisez <strong>toujours<\/strong> votre ligne compl\u00e8te avant de presser \u00ab\u00a0Entr\u00e9e\u00a0\u00bb et v\u00e9rifiez que vous n&rsquo;avez pas saisi machinalement <code>\/dev\/sdf<\/code>.<\/p>\n<p>Il nous faut les droits root&nbsp;:<\/p>\n<pre>[linux-2.6.39.5]$ <strong>cd ~\/Projets\/Panda\/<\/strong>\n[Panda]$ <strong>su<\/strong>\nPassword:\n[Panda]#<\/pre>\n<p style=\"text-align: justify;\">Si vous utilisez une distribution qui ne veut pas vous fournir de commande <code>su<\/code>, utilisez&nbsp;:<\/p>\n<pre>[linux-2.6.39.5]$ <strong>sudo bash<\/strong>\nPassword:\n[~]# <strong>cd \/home\/votre-login\/Projets\/Panda\/<\/strong>\n[Panda]#<\/pre>\n<p style=\"text-align: justify;\">Tout d&rsquo;abord, effa\u00e7ons totalement la table des partitions&nbsp;:<\/p>\n<pre>[Panda]# <strong>dd if=\/dev\/zero of=<span style=\"color: #ff0000;\">\/dev\/sdf<\/span> bs=1M count=1<\/strong>\n1+0 records in\n1+0 records out\n1048576 bytes (1.0 MB) copied, 0.238374 s, 4.4 MB\/s\n[Panda]#<\/pre>\n<p style=\"text-align: justify;\">Puis nous allons scinder notre carte micro-SD en deux partitions&nbsp;: la premi\u00e8re contiendra le <em>bootloader<\/em> et l&rsquo;image du <em>kernel<\/em>, la seconde contiendra le syst\u00e8me de fichiers principal.<\/p>\n<pre>[Panda]# <strong>fdisk <span style=\"color: #ff0000;\">\/dev\/sdf<\/span><\/strong>\nDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel\n[...]\nWarning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)<\/pre>\n<p style=\"text-align: justify;\">Cr\u00e9ons une premi\u00e8re partition de quelques Mo (afin de pouvoir y stocker confortablement quelques images du noyau Linux lors des futures exp\u00e9rimentations)&nbsp;:<\/p>\n<pre>Command (m for help): <strong>n<\/strong>\nCommand action\n   e   extended\n   p   primary partition (1-4)\n<strong>p<\/strong>\nPartition number (1-4, default 1): <strong>1<\/strong>\nFirst sector (2048-3842047, default 2048): <strong><em>Entr\u00e9e<\/em><\/strong>\nUsing default value 2048\nLast sector, +sectors or +size{K,M,G} (2048-3842047, default 3842047): <strong>+64M<\/strong><\/pre>\n<p style=\"text-align: justify;\">Puis une seconde partition pour le syst\u00e8me de fichiers (tout le reste de la carte Micro-SD par exemple)&nbsp;:<\/p>\n<pre>Command (m for help): <strong>n<\/strong>\nCommand action\n   e   extended\n   p   primary partition (1-4)\n<strong>p<\/strong>\nPartition number (1-4, default 2): <strong>2<\/strong>\nFirst sector (133120-3842047, default 133120): <strong><em>Entr\u00e9e<\/em><\/strong>\nUsing default value 133120\nLast sector, +sectors or +size{K,M,G} (133120-3842047, default 3842047): <strong><em>Entr\u00e9e<\/em><\/strong>\nUsing default value 3842047<\/pre>\n<p style=\"text-align: justify;\">Rendons la premi\u00e8re partition <em>bootable<\/em> au format Fat 32&nbsp;:<\/p>\n<pre>Command (m for help): <strong>t<\/strong>\nPartition number (1-4): <strong>1<\/strong>\nHex code (type L to list codes): <strong>c<\/strong>\nChanged system type of partition 1 to c (W95 FAT32 (LBA))\nCommand (m for help): <strong>a<\/strong>\nPartition number (1-4): <strong>1<\/strong>\nCommand (m for help): <strong>w<\/strong>\nThe partition table has been altered!\n[...]\nSyncing disks.\n[Panda]#<\/pre>\n<p style=\"text-align: justify;\">Formattons \u00e0 pr\u00e9sent les deux partitions&nbsp;:<\/p>\n<pre>[Panda]# <strong>mkfs.vfat -n boot <span style=\"color: #ff0000;\">\/dev\/sdf1<\/span><\/strong>\nmkfs.vfat 3.0.9 (31 Jan 2010)\n[Panda]# <strong>mkfs.ext3 -L root <span style=\"color: #ff0000;\">\/dev\/sdf2<\/span><\/strong>\nmke2fs 1.41.12 (17-May-2010)\nFilesystem label=root\n[...]\nThis filesystem will be automatically checked every 38 mounts or\n180 days, whichever comes first.  Use tune2fs -c or -i to override.\n[Panda]#<\/pre>\n<p style=\"text-align: justify;\">Le choix du format Ext 3 pour la partition contenant le syst\u00e8me de fichier est d\u00fb \u00e0 la configuration de U-boot. Dans le fichier<br \/>\n<code>u-boot\/include\/configs\/omap4_panda.h<\/code> que nous avons \u00e9dit\u00e9 plus haut, on rencontre les lignes&nbsp;:<\/p>\n<pre>        \"mmcroot=\/dev\/mmcblk0p2 rw\u0000\" \n        \"mmcrootfstype=ext3 rootwait\u0000\" \n        \"mmcargs=setenv bootargs console=${console} \" \n                \"vram=${vram} \" \n                \"root=${mmcroot} \" \n                \"rootfstype=${mmcrootfstype}\u0000\" <\/pre>\n<p style=\"text-align: justify;\">qui indiquent que le noyau Linux va recevoir en argument les options <code>root=<\/code> et <code>rootfstype=<\/code> qui pr\u00e9cisent l&#8217;emplacement et le format du syst\u00e8me de fichiers principal. Ici, la partition est <code>mmcblk0p2<\/code> (deuxi\u00e8me partition de la premi\u00e8re carte Micro-SD) et le format Ext 3.<\/p>\n<p style=\"text-align: justify;\">\n<h2>Installation du bootloader et du kernel sur la carte micro-SD<\/h2>\n<p>Nous montons notre partition de boot (si ce n&rsquo;est pas fait automatiquement)&nbsp;:<\/p>\n<pre>[Panda]# <strong>mkdir \/mnt\/boot<\/strong>\n[Panda]# <strong>mount <span style=\"color: #ff0000;\">\/dev\/sdf1<\/span> \/mnt\/boot\/<\/strong><\/pre>\n<p style=\"text-align: justify;\">Copions sur la carte les trois fichiers n\u00e9cessaires pour le chargement de U-boot&nbsp;:<\/p>\n<pre>[Panda]# <strong>cp x-loader\/MLO \/mnt\/boot\/<\/strong>\n[Panda]# <strong>cp x-loader\/x-load.bin \/mnt\/boot\/<\/strong>\n[Panda]# <strong>cp u-boot\/u-boot.bin \/mnt\/boot\/<\/strong>\n[Panda]#<\/pre>\n<p style=\"text-align: justify;\">Puis copions le noyau lui-m\u00eame et d\u00e9montons la carte Micro-SD.<\/p>\n<pre>[Panda]# <strong>cp linux-2.6.39-rc5\/arch\/arm\/boot\/uImage \/mnt\/boot\/<\/strong>\n[Panda]# <strong>umount \/mnt\/boot<\/strong><\/pre>\n<h2>Premier <em>boot<\/em> de notre syst\u00e8me<\/h2>\n<p style=\"text-align: justify;\">Ins\u00e9rons la carte Micro-SD dans l&#8217;emplacement pr\u00e9vu sur la Pandaboard. Pour pouvoir observer les traces du d\u00e9marrage, il faut utiliser une console connect\u00e9e sur le port s\u00e9rie de la Pandaboard. Ce port est pr\u00e9vu pour \u00eatre directement reli\u00e9 au port s\u00e9rie RS\/232 d&rsquo;un PC (sans besoin de c\u00e2ble crois\u00e9 <em>null-modem<\/em>). La plupart des PC de nos jours n&rsquo;ayant plus de port RS\/232 classique, il faudra utiliser un adaptateur USB\/S\u00e9rie que l&rsquo;on connecte directement depuis le port USB de l&rsquo;ordinateur h\u00f4te vers le port s\u00e9rie de la Pandaboard.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-632 aligncenter\" title=\"Pandaboard et c\u00e2ble USB \/ S\u00e9rie\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/Pandaboard-02.jpg\" alt=\"Pandaboard et c\u00e2ble USB \/ S\u00e9rie\" width=\"250\" height=\"230\" \/><\/p>\n<p style=\"text-align: justify;\">Sur le PC, nous utiliserons l&rsquo;\u00e9mulateur de terminal <code>minicom<\/code> configur\u00e9 pour dialoguer sur le port \/dev\/ttyUSB0, vitesse 115200 pas de parit\u00e9 ni de contr\u00f4le de flux (ce param\u00e9trage provient encore du fichier\u00a0<code>omap4_panda.h<\/code> de U-boot d\u00e9crit plus haut. Voici les traces de boot relev\u00e9es sur <code>minicom<\/code> :<\/p>\n<pre>Texas Instruments X-Loader 1.5.0 (May  3 2011 - 07:49:31)\nReading boot sector\nLoading u-boot.bin from mmc<\/pre>\n<p style=\"text-align: justify;\">Le bootloader de premier niveau X-loader a bien d\u00e9marr\u00e9 et trouv\u00e9 l&rsquo;image de U-boot, puis l&rsquo;a charg\u00e9e et lui passe le contr\u00f4le<\/p>\n<pre>U-Boot 2011.03-00398-ga621b16-dirty (May 03 2011 - 08:42:19)\nCPU  : OMAP4430\nBoard: OMAP4 Panda\nI2C:   ready\nDRAM:  1 GiB\nMMC:   OMAP SD\/MMC: 0\nUsing default environment\n\nIn:    serial\nOut:   serial\nErr:   serial\nHit any key to stop autoboot:  0<\/pre>\n<p style=\"text-align: justify;\">U-boot d\u00e9tecte le mat\u00e9riel, et nous propose un d\u00e9compte de 3 secondes pendant lesquelles on peut l&rsquo;interrompre pour modifier ses param\u00e8tres. Laissons l&rsquo;autoboot continuer&nbsp;:<\/p>\n<pre>reading boot.scr\n\n** Unable to read \"boot.scr\" from mmc 0:1 **\nreading uImage\n\n3060648 bytes read\nBooting from mmc0 ...\n## Booting kernel from Legacy Image at 82000000 ...\n   Image Name:   Linux-2.6.39-rc5-cpb\n   Image Type:   ARM Linux Kernel Image (uncompressed)\n   Data Size:    3060584 Bytes = 2.9 MiB\n   Load Address: 80008000\n   Entry Point:  80008000\n   Verifying Checksum ... OK\n   Loading Kernel Image ... OK\nOK<\/pre>\n<p style=\"text-align: justify;\">U-boot a trouv\u00e9 une image au format uImage sur la premi\u00e8re partition de la carte <code>mmc0<\/code>, il l&rsquo;identifie comme un noyau Linux, la charge en m\u00e9moire et lui transf\u00e8re le contr\u00f4le<\/p>\n<pre>Starting kernel ...\nUncompressing Linux... done, booting the kernel.<\/pre>\n<p style=\"text-align: justify;\">Le noyau Linux est compress\u00e9, il ex\u00e9cute un petit auto-d\u00e9compresseur en m\u00e9moire avant le d\u00e9marrage r\u00e9el<\/p>\n<pre>[    0.000000] Initializing cgroup subsys cpu\n[    0.000000] Linux version <strong>2.6.39-rc5-cpb<\/strong> (cpb@tr-a-0) (gcc version 4.3.5 (Buildroot 2010.08) ) #1 SMP Tue May 3 11:14:47 1<\/pre>\n<p style=\"text-align: justify;\">Nous pouvons voir passer notre num\u00e9ro de version du kernel<\/p>\n<pre>[    0.000000] CPU: ARMv7 Processor [411fc092] revision 2 (ARMv7), cr=10c5387f\n[    0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache\n[    0.000000] Machine: OMAP4 Panda board\n[    0.000000] Reserving 16777216 bytes SDRAM for VRAM\n[    0.000000] Memory policy: ECC disabled, Data cache writealloc\n[    0.000000] Truncating RAM at 80000000-bfffffff to -afffffff (vmalloc region overlap).\n[    0.000000] OMAP4430 ES2.1\n[    0.000000] SRAM: Mapped pa 0x40300000 to va 0xfe400000 size: 0xe000\n[    0.000000] powerdomain: waited too long for powerdomain dss_pwrdm to complete transition\n[    0.000000] PERCPU: Embedded 7 pages\/cpu @c113b000 s7808 r8192 d12672 u32768\n[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 195072\n[    0.000000] Kernel command line: console=ttyO2,115200n8 vram=16M root=\/dev\/mmcblk0p2 rw rootfstype=ext3 rootwait\n[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)\n[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)\n[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)\n[    0.000000] Memory: 1008MB = 1008MB total\n[    0.000000] Memory: 767940k\/767940k available, 18492k reserved, 0K highmem\n[    0.000000] Virtual kernel memory layout:\n[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)\n[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)\n[    0.000000]     DMA     : 0xffc00000 - 0xffe00000   (   2 MB)\n[    0.000000]     vmalloc : 0xf0800000 - 0xf8000000   ( 120 MB)\n[    0.000000]     lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)\n[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)\n[    0.000000]       .init : 0xc0008000 - 0xc003e000   ( 216 kB)\n[    0.000000]       .text : 0xc003e000 - 0xc05a6248   (5537 kB)\n[    0.000000]       .data : 0xc05a8000 - 0xc05f95a0   ( 326 kB)\n[    0.000000] Hierarchical RCU implementation.\n[    0.000000]  RCU-based detection of stalled CPUs is disabled.\n[    0.000000] NR_IRQS:410\n[    0.000000] omap_hwmod: dpll_mpu_m2_ck: missing clockdomain for dpll_mpu_m2_ck.\n[    0.000000] OMAP clockevent source: GPTIMER1 at 32768 Hz\n[    0.000000] sched_clock: 32 bits at 32kHz, resolution 30517ns, wraps every 131071999ms\n[    0.000000] Console: colour dummy device 80x30\n[    0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar\n[    0.000000] ... MAX_LOCKDEP_SUBCLASSES:  8\n[    0.000000] ... MAX_LOCK_DEPTH:          48\n[    0.000000] ... MAX_LOCKDEP_KEYS:        8191\n[    0.000000] ... CLASSHASH_SIZE:          4096\n[    0.000000] ... MAX_LOCKDEP_ENTRIES:     16384\n[    0.000000] ... MAX_LOCKDEP_CHAINS:      32768\n[    0.000000] ... CHAINHASH_SIZE:          16384\n[    0.000000]  memory used by lock dependency info: 3695 kB\n[    0.000000]  per task-struct memory footprint: 1152 bytes\n[    0.000671] Calibrating delay loop... 2007.19 BogoMIPS (lpj=7839744)\n[    0.062499] pid_max: default: 32768 minimum: 301\n[    0.063110] Security Framework initialized\n[    0.063415] Mount-cache hash table entries: 512\n[    0.066802] CPU: Testing write buffer coherency: ok\n[    0.067535] Calibrating local timer... 491.91MHz.\n[    0.109619] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available\n[    0.109741] L310 cache controller enabled\n[    0.109741] l2x0: 16 ways, CACHE_ID 0x410000c4, AUX_CTRL 0x7e470000, Cache size: 1048576 B\n[    0.111877] CPU1: Booted secondary processor\n[    0.111907] CPU1: Unknown IPI message 0x1\n[    0.140228] Brought up 2 CPUs\n[    0.140228] SMP: Total of 2 processors activated (3963.96 BogoMIPS).\n[    0.146911] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for emif_fw\n[    0.146911] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l3_instr\n[    0.146942] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l3_main_1\n[    0.146942] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l3_main_2\n[    0.146972] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l4_abe\n[    0.146972] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l4_cfg\n[    0.146972] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l4_per\n[    0.147003] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for l4_wkup\n[    0.147003] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for mpu_private\n[    0.147003] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for dsp\n[    0.147033] omap_hwmod: _populate_mpu_rt_base found no _mpu_rt_va for ipu\n[    0.147277] omap_hwmod: l3_div_ck: missing clockdomain for l3_div_ck.\n[    0.152404] print_constraints: dummy:\n[    0.152984] NET: Registered protocol family 16\n[    0.153442] GPMC revision 6.0\n[    0.156372] omap_device: omap_gpio.0: new worst case activate latency 0: 30517\n[    0.156707] OMAP GPIO hardware version 0.1\n[    0.157012] OMAP GPIO hardware version 0.1\n[    0.157257] OMAP GPIO hardware version 0.1\n[    0.157531] OMAP GPIO hardware version 0.1\n[    0.157775] OMAP GPIO hardware version 0.1\n[    0.158050] OMAP GPIO hardware version 0.1\n[    0.162841] omap_mux_init: Add partition: #1: core, flags: 2\n[    0.164154] omap_mux_init: Add partition: #2: wkup, flags: 2\n[    0.166717] omap_device: omap_uart.0: new worst case activate latency 0: 30517\n[    0.172576] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers.\n[    0.172576] hw-breakpoint: 1 breakpoint(s) reserved for watchpoint single-step.\n[    0.172607] hw-breakpoint: maximum watchpoint size is 4 bytes.\n[    0.175689] pm_dbg_init: only OMAP3 supported\n[    0.175903] OMAP DMA hardware revision 0.0\n[    0.201141] bio: create slab  at 0\n[    0.202880] print_constraints: vwl1271: 1800 mV\n[    0.205871] SCSI subsystem initialized\n[    0.207122] omap_device: omap2_mcspi.2: new worst case deactivate latency 0: 30517\n[    0.207550] omap_device: omap2_mcspi.4: new worst case activate latency 0: 30517\n[    0.209106] usbcore: registered new interface driver usbfs\n[    0.209533] usbcore: registered new interface driver hub\n[    0.209838] usbcore: registered new device driver usb\n[    0.224060] omap_i2c omap_i2c.1: bus 1 rev4.0 at 400 kHz\n[    0.240173] Skipping twl internal clock init and using bootloader value (unknown osc rate)\n[    0.241027] twl6030: PIH (irq 39) chaining IRQs 368..387\n[    0.263305] print_constraints: VMMC: 1200 &lt;--&gt; 3000 mV at 3000 mV normal standby\n[    0.264495] print_constraints: VPP: 1800 &lt;--&gt; 2500 mV at 1900 mV normal standby\n[    0.265411] print_constraints: VANA: 2100 mV normal standby\n[    0.266296] print_constraints: VCXIO: 1800 mV normal standby\n[    0.267150] print_constraints: VDAC: 1800 mV normal standby\n[    0.268218] print_constraints: VAUX2_6030: 1200 &lt;--&gt; 2800 mV at 1800 mV normal standby\n[    0.269317] print_constraints: VAUX3_6030: 1000 &lt;--&gt; 3000 mV at 1200 mV normal standby\n[    0.270233] print_constraints: CLK32KG:\n[    0.270538] omap_device: omap_i2c.1: new worst case deactivate latency 0: 30517\n[    0.284881] omap_i2c omap_i2c.2: bus 2 rev4.0 at 400 kHz\n[    0.285278] omap_device: omap_i2c.3: new worst case activate latency 0: 30517\n[    0.300109] omap_i2c omap_i2c.3: bus 3 rev4.0 at 100 kHz\n[    0.315338] omap_i2c omap_i2c.4: bus 4 rev4.0 at 400 kHz\n[    0.320556] Switching to clocksource 32k_counter\n[    0.320953] cfg80211: Calling CRDA to update world regulatory domain\n[    0.322998] Switched to NOHz mode on CPU #0\n[    0.325256] Switched to NOHz mode on CPU #1<\/pre>\n<p style=\"text-align: justify;\">Le noyau a d\u00e9tect\u00e9 tous les p\u00e9riph\u00e9riques qu&rsquo;il conna\u00eet, il passe \u00e0 l&rsquo;initialisation des \u00e9l\u00e9ments logiciels (piles r\u00e9seau, USB, etc.)<\/p>\n<pre>[    0.346801] NET: Registered protocol family 2\n[    0.347167] IP route cache hash table entries: 32768 (order: 5, 131072 bytes)\n[    0.347442] IPv4 FIB: Using LC-trie version 0.409\n[    0.348205] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)\n[    0.350372] TCP bind hash table entries: 65536 (order: 9, 2359296 bytes)\n[    0.365234] TCP: Hash tables configured (established 131072 bind 65536)\n[    0.365356] TCP reno registered\n[    0.365386] UDP hash table entries: 512 (order: 3, 40960 bytes)\n[    0.365661] UDP-Lite hash table entries: 512 (order: 3, 40960 bytes)\n[    0.366455] NET: Registered protocol family 1\n[    0.367187] RPC: Registered udp transport module.\n[    0.367187] RPC: Registered tcp transport module.\n[    0.367187] RPC: Registered tcp NFSv4.1 backchannel transport module.\n[    0.367889] NetWinder Floating Point Emulator V0.97 (double precision)\n[    0.369384] omap_init_opp_table: no hwmod or odev for iva, [6] cannot add OPPs.\n[    0.372375] VFS: Disk quotas dquot_6.5.2\n[    0.372589] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)\n[    0.373687] JFFS2 version 2.2. (NAND) (SUMMARY)  \ufffd\u00a9 2001-2006 Red Hat, Inc.\n[    0.374114] msgmni has been set to 1499\n[    0.376251] io scheduler noop registered\n[    0.376251] io scheduler deadline registered\n[    0.376342] io scheduler cfq registered (default)\n[    0.438018] OMAP DSS rev 4.0\n[    0.828460] Serial: 8250\/16550 driver, 4 ports, IRQ sharing enabled\n[    1.024414] omap_uart.0: ttyO0 at MMIO 0x4806a000 (irq = 104) is a OMAP UART0\n[    1.070800] omap_uart.1: ttyO1 at MMIO 0x4806c000 (irq = 105) is a OMAP UART1\n[    1.133300] omap_uart.2: ttyO2 at MMIO 0x48020000 (irq = 106) is a OMAP UART2\n[    1.995269] console [ttyO2] enabled\n[    2.055175] omap_uart.3: ttyO3 at MMIO 0x4806e000 (irq = 102) is a OMAP UART3\n[    2.139251] brd: module loaded\n[    2.149353] loop: module loaded\n[    2.154937] mtdoops: mtd device (mtddev=name\/number) must be supplied\n[    2.164123] usbcore: registered new interface driver asix\n[    2.169982] usbcore: registered new interface driver cdc_ether\n[    2.176330] usbcore: registered new interface driver smsc95xx\n[    2.182373] cdc_ncm: 7-Feb-2011\n[    2.185852] usbcore: registered new interface driver cdc_ncm\n[    2.192993] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver\n[    2.200164] ehci-omap ehci-omap.0: OMAP-EHCI Host Controller\n[    2.208160] ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 1\n[    2.235137] ehci-omap ehci-omap.0: irq 109, io mem 0x4a064c00\n[    2.250518] ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00\n[    2.257019] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002\n[    2.264129] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1\n[    2.271667] usb usb1: Product: OMAP-EHCI Host Controller\n[    2.277221] usb usb1: Manufacturer: Linux 2.6.39-rc5-cpb ehci_hcd\n[    2.283599] usb usb1: SerialNumber: ehci-omap.0\n[    2.290405] hub 1-0:1.0: USB hub found\n[    2.294403] hub 1-0:1.0: 3 ports detected\n[    2.328796] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver\n[    2.335388] ohci-omap3 ohci-omap3.0: OMAP3 OHCI Host Controller\n[    2.342285] ohci-omap3 ohci-omap3.0: new USB bus registered, assigned bus number 2\n[    2.367828] ohci-omap3 ohci-omap3.0: irq 108, io mem 0x4a064800\n[    2.450042] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001\n[    2.457153] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1\n[    2.464691] usb usb2: Product: OMAP3 OHCI Host Controller\n[    2.470336] usb usb2: Manufacturer: Linux 2.6.39-rc5-cpb ohci_hcd\n[    2.476684] usb usb2: SerialNumber: ohci-omap3.0\n[    2.482604] hub 2-0:1.0: USB hub found\n[    2.486572] hub 2-0:1.0: 3 ports detected\n[    2.491943] usbcore: registered new interface driver cdc_wdm\n[    2.497863] Initializing USB Mass Storage driver...\n[    2.503540] usbcore: registered new interface driver usb-storage\n[    2.509857] USB Mass Storage support registered.\n[    2.515228] usbcore: registered new interface driver libusual\n[    2.625488] usb 1-1: new high speed USB device number 2 using ehci-omap\n[    3.016265] usb 1-1: New USB device found, idVendor=0424, idProduct=9514\n[    3.023254] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0\n[    3.032196] hub 1-1:1.0: USB hub found\n[    3.036315] hub 1-1:1.0: 5 ports detected\n[    3.064025] usbcore: registered new interface driver usbtest\n[    3.071502] mousedev: PS\/2 mouse device common for all mice\n[    3.079742] omap_device: omap_i2c.1: new worst case activate latency 0: 61035\n[    3.088928] twl_rtc twl_rtc: rtc core: registered twl_rtc as rtc0\n[    3.095581] twl_rtc twl_rtc: Power up reset detected.\n[    3.102020] twl_rtc twl_rtc: Enabling TWL-RTC.\n[    3.107238] i2c \/dev entries driver\n[    3.113098] Driver for 1-wire Dallas network protocol.\n[    3.120147] OMAP Watchdog Timer Rev 0x00: initial timeout 60 sec\n[    3.126464] omap_device: omap_wdt.-1: new worst case deactivate latency 0: 30517\n[    3.142059] usbcore: registered new interface driver usbhid\n[    3.147888] usbhid: USB HID core driver\n[    3.152221] TCP cubic registered\n[    3.155578] Initializing XFRM netlink socket\n[    3.160125] NET: Registered protocol family 17\n[    3.164855] NET: Registered protocol family 15\n[    3.169738] lib80211: common routines for IEEE802.11 drivers\n[    3.175689] Registering the dns_resolver key type\n[    3.180877] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 1\n[    3.189422] ThumbEE CPU extension supported.\n[    3.193908] Registering SWP\/SWPB emulation handler\n[    3.205566] omap2_set_init_voltage: Invalid parameters!\n[    3.211059] omap2_set_init_voltage: Unable to put vdd_iva to its init voltage\n[    3.220092] Power Management for TI OMAP4.\n[    3.241333] clock: disabling unused clocks to save power\n[    3.249389] omapfb omapfb: no driver for display\n[    3.254302] omapfb omapfb: failed to setup omapfb\n[    3.255310] mmc0: host does not support reading read-only switch. assuming write-enable.\n[    3.257354] mmc0: new high speed SD card at address 1234\n[    3.259185] mmcblk0: mmc0:1234 SA02G 1.83 GiB\n[    3.263610]  mmcblk0: p1 p2\n[    3.281646] regulator_init_complete: CLK32KG: incomplete constraints, leaving on\n[    3.289733] regulator_init_complete: VAUX3_6030: incomplete constraints, leaving on\n[    3.298004] regulator_init_complete: VAUX2_6030: incomplete constraints, leaving on\n[    3.306243] regulator_init_complete: VDAC: incomplete constraints, leaving on\n[    3.313903] regulator_init_complete: VCXIO: incomplete constraints, leaving on\n[    3.321624] regulator_init_complete: VANA: incomplete constraints, leaving on\n[    3.329284] regulator_init_complete: VPP: incomplete constraints, leaving on\n[    3.367218] twl_rtc twl_rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800)\n[    3.692810] EXT3-fs (mmcblk0p2): using internal journal\n[    3.698303] EXT3-fs (mmcblk0p2): recovery complete\n[    3.703613] EXT3-fs (mmcblk0p2): mounted filesystem with ordered data mode\n[    3.711273] VFS: Mounted root (ext3 filesystem) on device 179:2.\n[    3.717681] Freeing init memory: 216K\n[    3.723968] Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation\/init..\n[    3.737152] CPU1: stopping\n[    3.740020] [] (unwind_backtrace+0x0\/0xec) from [] (do_IPI+0xb0\/0x124)\n[    3.748718] [] (do_IPI+0xb0\/0x124) from [] (__irq_svc+0x38\/0xc0)\n[    3.756866] Exception stack(0xef871f90 to 0xef871fd8)\n[    3.762176] 1f80:                                     00000001 ef86f8c8 00000000 0000a306\n[    3.770751] 1fa0: ef870000 c05c1f2c c05c1d10 c05f96a8 c04395ac 411fc092 00000000 00000000\n[    3.779357] 1fc0: ef870000 ef871fd8 c00a7210 c004a668 20000113 ffffffff\n[    3.786315] [] (__irq_svc+0x38\/0xc0) from [] (default_idle+0x28\/0x30)\n[    3.794891] [] (default_idle+0x28\/0x30) from [] (cpu_idle+0x90\/0xe8)\n[    3.803405] [] (cpu_idle+0x90\/0xe8) from [&lt;8042fe4c&gt;] (0x8042fe4c)<\/pre>\n<p style=\"text-align: justify;\">Nous observons (\u00e0 l&rsquo;instant 3.723968) un message familier aux d\u00e9veloppeurs Linux embarqu\u00e9&nbsp;:<\/p>\n<pre>Kernel panic - not syncing: No init found. Try passing init=option to kernel. See Linux Documentation\/init<\/pre>\n<p style=\"text-align: justify;\">Et contrairement \u00e0 ce qu&rsquo;il semble au premier abord c&rsquo;est <strong>une excellente nouvelle<\/strong> !<\/p>\n<p style=\"text-align: justify;\">\n<h2 style=\"text-align: justify;\">Conclusion<\/h2>\n<p style=\"text-align: justify;\">Reprenons ce que nous avons obtenu&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Les deux bootloaders fonctionnent parfaitement et chargent l&rsquo;image du noyau<\/li>\n<li style=\"text-align: justify;\">Le noyau Linux d\u00e9marre, reconnait le mat\u00e9riel de base (nous devrons peut-\u00eatre ajouter d&rsquo;autres drivers par la suite mais nous avons d\u00e9j\u00e0 l&rsquo;essentiel des p\u00e9riph\u00e9riques)<\/li>\n<li style=\"text-align: justify;\">une fois le mat\u00e9riel reconnu, le kernel a fait toute son initialisation logicielle correctement<\/li>\n<li style=\"text-align: justify;\">le p\u00e9riph\u00e9rique contenant le syst\u00e8me de fichier initial a \u00e9t\u00e9 trouv\u00e9 et mont\u00e9 sans erreur&nbsp;: (&lsquo;instant\u00a03.711273)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">\n<p style=\"text-align: justify;\">Il ne reste \u00ab\u00a0plus qu&rsquo;\u00e0\u00a0\u00bb d\u00e9marrer le premier processus dans l&rsquo;espace utilisateur. Ce processus doit s&rsquo;appeler <code>init<\/code> et se trouver dans <code>\/bin<\/code>, <code>\/etc<\/code>, ou <code>\/sbin<\/code>. Naturellement nous n&rsquo;avons rien install\u00e9 encore sur le syst\u00e8me de fichiers aussi le noyau \u00e9choue-t-il dans cette derni\u00e8re op\u00e9ration. Il s&rsquo;agit bien de la derni\u00e8re op\u00e9ration du <em>boot<\/em> en mode noyau, juste avant de d\u00e9marrer la partie utilisateur.<\/p>\n<p style=\"text-align: justify;\">Donc, ce message est une tr\u00e8s bonne nouvelle, car notre noyau Linux a \u00e9t\u00e9 correctement install\u00e9 sur la Pandaboard. Dans le prochain article nous installerons le reste du syst\u00e8me de fichiers (ce qui, par ailleurs, ne d\u00e9pend que tr\u00e8s peu du mat\u00e9riel proprement dit).<\/p>","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai enfin trouv&eacute; le temps de faire un essai d&rsquo;installation d&rsquo;un syst&egrave;me totalement personnalis&eacute; (tr&egrave;s incomplet pour le moment) sur ma carte Pandaboard re&ccedil;ue depuis quelques semaines.<\/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],"tags":[],"class_list":["post-594","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-microprocesseur"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/594","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=594"}],"version-history":[{"count":0,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/594\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}