{"id":1269,"date":"2011-11-27T06:28:54","date_gmt":"2011-11-27T05:28:54","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=1269"},"modified":"2024-08-07T21:36:15","modified_gmt":"2024-08-07T20:36:15","slug":"xenomai-sur-pandaboard","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/11\/27\/xenomai-sur-pandaboard\/","title":{"rendered":"Xenomai sur Pandaboard"},"content":{"rendered":"<p style=\"text-align: justify;\">L&rsquo;installation de la derni\u00e8re version de Xenomai (2.6.0) sur une carte Pandaboard ne devrait en principe pas pr\u00e9senter de difficult\u00e9s. En principe. Mais en pratique je crois \u00eatre tomb\u00e9 dans tous les pi\u00e8ges possibles avant d&rsquo;arriver \u00e0 faire fonctionner correctement mon syst\u00e8me. Je vous fais gr\u00e2ce de mes m\u00e9saventures, et voici donc un petit r\u00e9sum\u00e9 des op\u00e9rations \u00e0 r\u00e9aliser pour pouvoir disposer de temps-r\u00e9el strict sur la carte Pandaboard.<\/p>\n<p>\n<!--more-->\n<\/p>\n<h1>Cha\u00eene de compilation<\/h1>\n<p style=\"text-align: justify;\">J&rsquo;ai habituellement un regard assez dubitatif sur les personnes qui accusent le compilateur de ne pas fournir le code attendu. Il a quand m\u00eame fallu que je finisse par me poser la question lorsque le noyau modifi\u00e9 et les biblioth\u00e8ques Xenomai \u00e9taient incompatibles et que j&rsquo;\u00e9tais oblig\u00e9 de modifier manuellement des <em>Makefile<\/em> pour forcer la compilation. En fait les options de compilation de Xenomai (notamment <code>FASTSYNCH<\/code>) d\u00e9pendent du type de processeur cible. Et ce dernier est d\u00e9termin\u00e9 en interrogeant le compilateur&#8230; Alors que dans le noyau Linux les options d\u00e9pendent de la configuration choisie manuellement lors du <code>make menuconfig<\/code>.<br \/>\nMon tort avait \u00e9t\u00e9 d&rsquo;utiliser une cha\u00eene de compilation Arm g\u00e9n\u00e9rique, que j&rsquo;avais pr\u00e9par\u00e9e pour une carte IGEPv2 comme je l&rsquo;avais d\u00e9crit dans <a title=\"Cr\u00e9er un syst\u00e8me embarqu\u00e9 pour IGEPv2 - Partie I\" href=\"http:\/\/www.logilin.fr\/article.php?ref=003\" target=\"_blank\" rel=\"noopener\">cet article<\/a>.<\/p>\n<p style=\"text-align: justify;\">Pour que la compilation des biblioth\u00e8ques et applications Xenomai se passe bien, il faut utiliser une <em>toolchain<\/em> adapt\u00e9e au processeur de la Pandaboard. Ce dernier est bas\u00e9 sur un coeur Cortex A9. Voici la pr\u00e9paration de la toolchain avec la derni\u00e8re version de Buildroot.<\/p>\n<pre>[~]$ <strong>cd Projets\/Panda\/<\/strong>\n[Panda]$ <strong>wget http:\/\/buildroot.uclibc.org\/downloads\/buildroot-2011.08.tar.bz2<\/strong>\n--2011-11-27 06:52:17--  http:\/\/buildroot.uclibc.org\/downloads\/buildroot-2011.08.tar.bz2\nR\u00e9solution de buildroot.uclibc.org... 140.211.167.224\nConnexion vers buildroot.uclibc.org|140.211.167.224|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 1838467 (1,8M) [application\/x-bzip2]\nSauvegarde en : \u00abbuildroot-2011.08.tar.bz2.1\u00bb\n\n100%[=======================================================================&gt;] 1 838 467   64,7K\/s   ds 39s     \n\n2011-11-27 06:52:57 (45,9 KB\/s) - \u00abbuildroot-2011.08.tar.bz2.1\u00bb sauvegard\u00e9 [1838467\/1838467]\n\n[Panda]$ <strong>tar xjf buildroot-2011.08.tar.bz2 <\/strong>\n[Panda]$ <strong>cd buildroot-2011.08\/<\/strong>\n[buildroot-2011.08]$ <strong>wget <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/config-buildroot-2011.08-Pandaboard\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/config-buildroot-2011.08-Pandaboard\" target=\"_blank\" rel=\"noopener\">http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/config-buildroot-2011.08-Pandaboard<\/a><\/strong>\n--2011-11-27 06:53:48--  http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/config-buildroot-2011.08-Pandaboard\nR\u00e9solution de www.blaess.fr... 217.16.3.18\nConnexion vers www.blaess.fr|217.16.3.18|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 18679 (18K) [text\/plain]\nSauvegarde en : \u00abconfig-buildroot-2011.08-Pandaboard\u00bb\n\n100%[=======================================================================&gt;] 18 679      31,1K\/s   ds 0,6s    \n\n2011-11-27 06:53:49 (31,1 KB\/s) - \u00abconfig-buildroot-2011.08-Pandaboard\u00bb sauvegard\u00e9 [18679\/18679]\n\n[buildroot-2011.08]$ <strong>mv config-buildroot-2011.08-Pandaboard .config<\/strong>\n[buildroot-2011.08]$ <strong>make menuconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">\u00c9ditez l&rsquo;option \u00ab\u00a0<em>Host dir<\/em>\u00a0\u00bb du menu \u00ab\u00a0<em>Build options<\/em>\u00a0\u00bb pour choisir le chemin absolu d&rsquo;installation de la <em>toolchain<\/em>. Par d\u00e9faut le chemin est <code>\/home\/cpb\/cross-panda<\/code> ce qui correspond \u00e0 l&rsquo;installation dans <em>mon<\/em> r\u00e9pertoire personnel. Pensez donc \u00e0 l&rsquo;adapter \u00e0 votre environnement. Puis lancez la compilation avec<\/p>\n<pre>[buildroot-2011.08]$ <strong>make<\/strong><\/pre>\n<p style=\"text-align: justify;\">La dur\u00e9e de cette \u00e9tape varie tr\u00e8s nettement suivant la puissance du processeur, l&rsquo;activit\u00e9 du syst\u00e8me et la vitesse du r\u00e9seau. Disons qu&rsquo;elle se mesure en dizaines de minutes. Elle nous fournira seulement la cha\u00eene de compilation, je n&rsquo;ai rien s\u00e9lectionn\u00e9 d&rsquo;autre dans la configuration de Buildroot (mais rien ne vous en emp\u00eache). La compilation se terminera ainsi&nbsp;:<\/p>\n<pre>[...]\nfor dir in ; \n\tdo \n\t\tfor lang in $(cd $dir; ls .|grep -v man); \n\t\tdo \n\t\t\tgrep -qx $lang \/home\/cpb\/Projets\/Panda\/buildroot-2011.08\/output\/build\/locales.nopurge || rm -rf $dir\/$lang; \n\t\tdone; \n\tdone\nrm -f \/home\/cpb\/Projets\/Panda\/buildroot-2011.08\/output\/build\/.fakeroot*\n[buildroot-2011.08]$<\/pre>\n<h1>Compilation du noyau Linux<\/h1>\n<p style=\"text-align: justify;\">Pour savoir quel noyau Linux utiliser, il nous faut d&rsquo;abord t\u00e9l\u00e9charger la version d\u00e9sir\u00e9e de Xenomai et regarder quels <em>patches<\/em> sont disponibles.<\/p>\n<pre>[~]$ <strong>cd ~\/Projets\/Panda\/<\/strong>\n[Panda]$ <strong>wget http:\/\/download.gna.org\/xenomai\/stable\/xenomai-2.6.0.tar.bz2<\/strong>\n--2011-11-27 07:23:30--  http:\/\/download.gna.org\/xenomai\/stable\/xenomai-2.6.0.tar.bz2\nR\u00e9solution de download.gna.org... 78.40.125.79\nConnexion vers download.gna.org|78.40.125.79|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 21068430 (20M) [application\/x-bzip2]\nSauvegarde en : \u00abxenomai-2.6.0.tar.bz2\u00bb\n\n100%[=========================================================================&gt;] 21 068 430  54,5K\/s   ds 3m 45s  \n\n2011-11-27 07:27:16 (91,5 KB\/s) - \u00abxenomai-2.6.0.tar.bz2\u00bb sauvegard\u00e9 [21068430\/21068430]\n\n[Panda]$ <strong>tar xjf xenomai-2.6.0.tar.bz2 <\/strong>\n[Panda]$ <strong>ls xenomai-2.6.0\/ksrc\/arch\/arm\/patches\/<\/strong>\nadeos-ipipe-2.6.35.9-arm-1.18-03.patch  adeos-ipipe-2.6.37.6-arm-1.18-03.patch  adeos-ipipe-<strong>2.6.38.8<\/strong>-arm-1.18-04.patch  mxc  README\n[Panda]$<\/pre>\n<p style=\"text-align: justify;\">La version 2.6.0 de Xenomai propose donc un <em>patch<\/em> pour le noyau Linux 2.6.38.8. Nous allons donc t\u00e9l\u00e9charger ce dernier.<\/p>\n<pre>[Panda]$ <strong>wget <a title=\"http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2\" href=\"http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2\">http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2<\/a><\/strong>\n--2011-11-27 07:34:33--  http:\/\/www.kernel.org\/pub\/linux\/kernel\/v2.6\/linux-2.6.38.8.tar.bz2\nR\u00e9solution de www.kernel.org... 149.20.4.69\nConnexion vers www.kernel.org|149.20.4.69|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 74811146 (71M) [application\/x-bzip2]\nSauvegarde en : \u00ablinux-2.6.38.8.tar.bz2\u00bb\n\n100%[=========================================================================&gt;] 74 811 146  1,41M\/s   ds 88s     \n\n2011-11-27 07:36:01 (831 KB\/s) - \u00ablinux-2.6.38.8.tar.bz2\u00bb sauvegard\u00e9 [74811146\/74811146]\n\n[Panda]$ <strong>tar xjf linux-2.6.38.8.tar.bz2<\/strong>\n[Panda]$<\/pre>\n<p style=\"text-align: justify;\">Ce noyau pose un souci pour la Pandaboard en ce qui concerne l&rsquo;initialisation du limitateur de courant. La cons\u00e9quence est que la carte risque de s&rsquo;\u00e9teindre automatiquement d\u00e8s que l&rsquo;on ex\u00e9cute une op\u00e9ration qui r\u00e9clame une augmentation de la consommation \u00e9lectrique (communication sur port s\u00e9rie, etc.) Heureusement il existe un patch pour la s\u00e9rie des Linux 2.6.38 permettant de corriger ce probl\u00e8me. J&rsquo;ai pass\u00e9 quelques heures \u00e0 modifier la configuration du noyau avant de le d\u00e9couvrir&#8230; Appliquons ce patch.<\/p>\n<pre>[Panda]$ <strong>cd linux-2.6.38.8\/<\/strong>\n[linux-2.6.38.8]$ <a title=\"wget http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/pandaboard-current-2.6.38.patch\" href=\"\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/pandaboard-current-2.6.38.patch\" target=\"_blank\" rel=\"noopener\"><strong>wget http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/pandaboard-current-2.6.38.patch<\/strong><\/a>\n--2011-11-27 07:46:56--  http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/pandaboard-current-2.6.38.patch\nR\u00e9solution de www.blaess.fr... 217.16.3.18\nConnexion vers www.blaess.fr|217.16.3.18|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 1745 (1,7K) [text\/plain]\nSauvegarde en : \u00abpandaboard-current-2.6.38.patch\u00bb\n\n100%[==========================================================================&gt;] 1 745       --.-K\/s   ds 0s      \n\n2011-11-27 07:46:56 (32,2 MB\/s) - \u00abpandaboard-current-2.6.38.patch\u00bb sauvegard\u00e9 [1745\/1745]\n\n[linux-2.6.38.8]$ <strong>patch -p1 &lt; pandaboard-current-2.6.38.patch <\/strong>\npatching file arch\/arm\/mach-omap2\/board-omap4panda.c\n[linux-2.6.38.8]$ <strong>cd ..<\/strong>\n[Panda]$<\/pre>\n<p style=\"text-align: justify;\">Avant de compiler le noyau, il convient de le modifier pour y incorporer les ajouts de Xenomai (notamment <em>ipipe<\/em>, le pipeline d&rsquo;interruption bas-niveau).<\/p>\n<pre><strong>[Panda]$ cd xenomai-2.6.0\/<\/strong>\n[xenomai-2.6.0]$ <strong>scripts\/prepare-kernel.sh --linux=..\/linux-2.6.38.8 --adeos=ksrc\/arch\/arm\/patches\/adeos-ipipe-2.6.38.8-arm-1.18-04.patch --arch=arm<\/strong>\npatching file arch\/arm\/Kconfig\npatching file arch\/arm\/boot\/compressed\/head.S\npatching file arch\/arm\/common\/gic.c\npatching file arch\/arm\/common\/it8152.c\npatching file arch\/arm\/common\/timer-sp.c\n[...]\npatching file mm\/mmu_context.c\npatching file mm\/mprotect.c\npatching file mm\/vmalloc.c\n[xenomai-2.6.0]$ <strong>cd ..<\/strong>\n[Panda]$<\/pre>\n<p style=\"text-align: justify;\">Puis compilons enfin notre noyau Linux modifi\u00e9. Pour cela j&rsquo;ai pr\u00e9par\u00e9 rapidement un fichier de configuration qui pourrait \u00eatre nettement am\u00e9lior\u00e9. J&rsquo;en profite \u00e9galement pour renommer le r\u00e9pertoire afin de pouvoir \u00e9ventuellement disposer d&rsquo;une version 2.6.38.8 sans Xenomai pour comparaison.<\/p>\n<pre>[Panda]$ <strong>mv linux-2.6.38.8 linux-2.6.38.8-xenomai<\/strong>\n[Panda]$ <strong>cd linux-2.6.38.8-xenomai\/<\/strong>\n[linux-2.6.38.8-xenomai]$ <strong>wget http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/config-linux-2.6.38.8-xenomai<\/strong>\n--2011-11-27 08:00:43--  http:\/\/www.blaess.fr\/christophe\/files\/article-2011-11-27\/config-linux-2.6.38.8-xenomai\nR\u00e9solution de www.blaess.fr... 217.16.3.18\nConnexion vers www.blaess.fr|217.16.3.18|:80... connect\u00e9.\nrequ\u00eate HTTP transmise, en attente de la r\u00e9ponse... 200 OK\nLongueur: 66509 (65K) [text\/plain]\nSauvegarde en : \u00abconfig-linux-2.6.38.8-xenomai\u00bb\n\n100%[==========================================================================&gt;] 66 509       260K\/s   ds 0,2s    \n\n2011-11-27 08:00:43 (260 KB\/s) - \u00abconfig-linux-2.6.38.8-xenomai\u00bb sauvegard\u00e9 [66509\/66509]\n\n[linux-2.6.38.8-xenomai]$ <strong>mv config-linux-2.6.38.8-xenomai .config<\/strong>\n[linux-2.6.38.8-xenomai]$ <strong>make ARCH=arm menuconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">En vous promenant dans le menu de configuration, vous apercevrez un nouveau sous-menu \u00ab\u00a0<em>Realtime Subsystem<\/em>\u00a0\u00bb correspondant \u00e0 la configuration de Xenomai notamment de ses \u00ab\u00a0<em>skins<\/em>\u00a0\u00bb qui permettent de reproduire l&rsquo;interface de programmation de diff\u00e9rents syst\u00e8mes temps-r\u00e9el (RTAI, VxWorks, pSos+, etc.). Nous pouvons \u00e0 pr\u00e9sent lancer la compilation du noyau.<\/p>\n<pre>[linux-2.6.38.8-xenomai]$ <strong>make ARCH=arm CROSS_COMPILE=~\/cross-panda\/usr\/bin\/arm-linux- uImage modules<\/strong>\n  CHK     include\/linux\/version.h\n  UPD     include\/linux\/version.h\n  CHK     include\/generated\/utsrelease.h\n  UPD     include\/generated\/utsrelease.h\n[...]\n  CC      fs\/nls\/nls_iso8859-15.mod.o\n  LD [M]  fs\/nls\/nls_iso8859-15.ko\n  CC      fs\/nls\/nls_utf8.mod.o\n  LD [M]  fs\/nls\/nls_utf8.ko\n  CC      net\/bluetooth\/l2cap.mod.o\n  LD [M]  net\/bluetooth\/l2cap.ko\n  IHEX    firmware\/kaweth\/new_code.bin\n  IHEX    firmware\/kaweth\/trigger_code.bin\n  IHEX    firmware\/kaweth\/new_code_fix.bin\n  IHEX    firmware\/kaweth\/trigger_code_fix.bin\n[linux-2.6.38.8-xenomai]$<\/pre>\n<h1>Installation du noyau modifie<\/h1>\n<p style=\"text-align: justify;\">Pour l&rsquo;installation, j&rsquo;ins\u00e8re la carte micro-SD de la Pandaboard dans un connecteur sur mon poste de travail, o\u00f9 le syst\u00e8me de fichiers principal se trouve mont\u00e9 en <code>\/media\/root<\/code> et la partition de d\u00e9marrage (contenant le <em>bootloader<\/em>) sur <code>\/media\/boot<\/code>. Sur ma carte se trouve un syst\u00e8me de fichiers minimal avec une configuration de Busybox et Dropbear comme d\u00e9crit dans <a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (2)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/13\/construire-son-systeme-personnel-sur-une-carte-pandaboard-2\/\" target=\"_blank\" rel=\"noopener\">cet article<\/a> et <a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (3)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/20\/construire-son-systeme-personnel-sur-une-carte-pandaboard-3\/\" target=\"_blank\" rel=\"noopener\">celui-ci<\/a>.<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\"><strong>Attention<\/strong>, si vous avez d\u00e9j\u00e0 install\u00e9 une toolchain en suivant mes premiers articles sur la Pandaboard, il faut absolument installer les nouvelles biblioth\u00e8ques sinon vous ne pourrez pas utiliser celles de Xenomai (et resterez bloqu\u00e9s comme moi pendant plusieurs heures \u00e0 jouer \u00e0 tort sur sa configuration). Il faut donc les copier ainsi&nbsp;:<\/p>\n<pre>[linux-2.6.38.8-xenomai]$ <strong>rm -rf \/media\/root\/lib\/*<\/strong>\n[linux-2.6.38.8-xenomai]$ <strong>cp -Rdp ~\/cross-panda\/usr\/arm-linux\/sysroot\/lib \/media\/root\/<\/strong>\n[linux-2.6.38.8-xenomai]$<\/pre>\n<p style=\"text-align: justify;\">On peut installer le noyau et ses modules ainsi&nbsp;:<\/p>\n<pre>[linux-2.6.38.8-xenomai]$ <strong>cp arch\/arm\/boot\/uImage \/media\/boot\/<\/strong>\n[linux-2.6.38.8-xenomai]$ <strong>make ARCH=arm INSTALL_MOD_PATH=\/media\/root\/ modules_install<\/strong>\n  INSTALL drivers\/hid\/hid-gaff.ko\n  INSTALL drivers\/hid\/hid-samsung.ko\n  INSTALL drivers\/hid\/hid-sjoy.ko\n  [...]\n  INSTALL \/media\/root\/\/lib\/firmware\/kaweth\/trigger_code.bin\n  INSTALL \/media\/root\/\/lib\/firmware\/kaweth\/new_code_fix.bin\n  INSTALL \/media\/root\/\/lib\/firmware\/kaweth\/trigger_code_fix.bin\n  DEPMOD  2.6.38.8-xenomai-cpb\n[linux-2.6.38.8-xenomai]$ umount \/media\/*oot\n[linux-2.6.38.8-xenomai]$<\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s avoir d\u00e9marr\u00e9 la Pandaboard, et s&rsquo;\u00eatre connect\u00e9 par SSHs, nous observons deux nouvelles entr\u00e9es dans <code>\/proc<\/code>.<\/p>\n<pre>[Panda]# <strong>ls \/proc\/ipipe\/<\/strong>\nLinux    Xenomai  version\n[Pandaboard]# <strong>ls \/proc\/xenomai\/<\/strong>\nacct          apc           heap          irq           lock          sched         stat          timer         version\naffinity      faults        interfaces    latency       registry      schedclasses  timebases     timerstat\n[Pandaboard]#<\/pre>\n<p style=\"text-align: justify;\">La premi\u00e8re correspond \u00e0 Adeos (renomm\u00e9 <code>ipipe<\/code> pour <em>interrupt pipeline<\/em>) et la seconde au domaine de Xenomai, dans lequel seront ordonnanc\u00e9es les futures t\u00e2ches temps-r\u00e9el.<\/p>\n<h1>Biblioth\u00e8ques de Xenomai<\/h1>\n<p style=\"text-align: justify;\">Les biblioth\u00e8ques de Xenomai doivent \u00eatre compil\u00e9es et install\u00e9es pour que les t\u00e2ches de l&rsquo;espace utilisateur puissent acc\u00e9der aux fonctionnalit\u00e9s temps-r\u00e9el. Certaines options de configuration ont chang\u00e9 depuis les derni\u00e8res versions de Xenomai (notamment l&rsquo;option <code>--enable-smp<\/code> dont je cherchais en vain la pr\u00e9sence dans la configuration du kernel).<\/p>\n<p style=\"text-align: justify;\">Pour compiler ces biblioth\u00e8ques nous utiliserons les manipulations suivantes. Attention, dans la ligne \u00ab\u00a0<code>.\/configure<\/code>\u00ab\u00a0, pr\u00e9cisez le chemin dans lequel les biblioth\u00e8ques et ex\u00e9cutables de Xenomai seront install\u00e9s sur votre poste de d\u00e9veloppement (en modifiant donc le chemin qui est pr\u00e9vu pour mon r\u00e9pertoire).<\/p>\n<pre><strong>[Panda]$ cd xenomai-2.6.0\/<\/strong>\n[xenomai-2.6.0]$ <strong>PATH=$PATH:~\/cross-panda\/usr\/bin\/<\/strong>\n[xenomai-2.6.0]$ <strong>.\/configure --prefix=\/home\/cpb\/Projets\/Panda\/xenomai --host=arm-linux CFLAGS='-march=armv7-a' LDFLAGS='-march=armv7-a' --enable-smp<\/strong>\nconfigure: WARNING: if you wanted to set the --build type, don't use --host.\n    If a cross compiler is detected then cross compile mode will be used\nchecking build system type... i686-pc-linux-gnu\nchecking host system type... arm-unknown-linux-gnu\nchecking for a BSD-compatible install... \/usr\/bin\/install -c\nchecking for arm-linux-gcc... arm-linux-gcc\nchecking whether the C compiler works... yes\n[...]\nconfig.status: executing depfiles commands\nconfig.status: executing libtool commands\n[xenomai-2.6.0]$ <strong>make <\/strong>\nMaking all in src\nmake[1]: entrant dans le r\u00e9pertoire \u00ab \/home\/cpb\/Projets\/Panda\/xenomai-2.6.0\/src \u00bb\nMaking all in include\n[...]\nmake[1]: entrant dans le r\u00e9pertoire \u00ab \/home\/cpb\/Projets\/Panda\/xenomai-2.6.0 \u00bb\nmake[1]: Rien \u00e0 faire pour \u00ab all-am \u00bb.\nmake[1]: quittant le r\u00e9pertoire \u00ab \/home\/cpb\/Projets\/Panda\/xenomai-2.6.0 \u00bb\n[xenomai-2.6.0]$ <strong>make install<\/strong>\n[...]\nmake[2]: Rien \u00e0 faire pour \u00ab install-data-am \u00bb.\nmake[2]: quittant le r\u00e9pertoire \u00ab \/home\/cpb\/Projets\/Panda\/xenomai-2.6.0 \u00bb\nmake[1]: quittant le r\u00e9pertoire \u00ab \/home\/cpb\/Projets\/Panda\/xenomai-2.6.0 \u00bb\n[xenomai-2.6.0]$ <strong>cd ..<\/strong>\n[Panda]$<\/pre>\n<p style=\"text-align: justify;\">Transf\u00e9rons les ex\u00e9cutables et les biblioth\u00e8ques en utilisant <code>scp<\/code> (s&rsquo;il n&rsquo;est pas install\u00e9 sur votre Pandaboard, faites une copie directe avec la carte micro-SD).<\/p>\n<pre>[Panda]$ <strong>cd xenomai<\/strong>\n[xenomai]$ <strong>ls<\/strong>\nbin  include  lib  sbin  share\n[xenomai]$ <strong>scp -r bin\/ lib\/ sbin\/ root@192.168.3.152:\/usr\/<\/strong>\nroot@192.168.3.152's password:\nxeno-test-run-wrapper                                                100%  181     0.2KB\/s   00:00\nxeno-test-run                                                        100%   17KB  17.3KB\/s   00:00\ninsn_read                                                            100%   14KB  14.1KB\/s   00:00\n[...]\nanalogy_config                                                       100% 9300     9.1KB\/s   00:00\nrtcanconfig                                                          100% 8493     8.3KB\/s   00:00\nrtps                                                                 100%   22KB  22.2KB\/s   00:00\n[xenomai]$<\/pre>\n<h1>Test de Xenomai<\/h1>\n<p style=\"text-align: justify;\">Apr\u00e8s s&rsquo;\u00eatre connect\u00e9 sur Xenomai, nous pouvons lancer les tests se trouvant install\u00e9s dans le r\u00e9pertoire <code>\/usr\/bin<\/code>. Il y en a plusieurs que je vous laisse d\u00e9couvrir, voyons juste le r\u00e9sultat d&rsquo;un outil que j&rsquo;aime bien&nbsp;: <code>cyclictest<\/code> qui mesure la variabilit\u00e9 des timers. Il en existe une version utilisant l&rsquo;API syst\u00e8me Linux classique (que l&rsquo;on trouve dans le projet Linux-rt) et un portage utilisant l&rsquo;API de Xenomai. Voyons un exemple o\u00f9 nous d\u00e9clenchons un timer toutes les 100 micro-secondes et observons le <em>jitter<\/em>.<\/p>\n<pre>[Panda]# <strong>cd \/usr\/bin<\/strong>\n[Panda]# <strong>.\/cyclictest -i 100<\/strong>\n0.47 0.17 0.09 1\/50 11834          \n\nT: 0 (11809) P:99 I:     100 C: 2372138 Min:       0 Act:       4 Avg:       0 Max:      17<\/pre>\n<p style=\"text-align: justify;\">En outre, l&rsquo;utilitaire <code>latency<\/code> donne des r\u00e9sultats comparables.<\/p>\n<pre>[Panda]# <strong>.\/latency -p 100<\/strong>\n== Sampling period: 100 us\n== Test mode: periodic user-mode task\n== All results in microseconds\nwarming up...\nRTT| 00:00:01 (periodic user-mode task, 100 us period, priority 99)\nRTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst\nRTD| 0.652| 0.837| 9.404| 0| 0| 0.652| 9.404\nRTD| 0.498| 0.857| 8.105| 0| 0| 0.498| 9.404\n[...]\nRTT| 04:28:07 (periodic user-mode task, 100 us period, priority 99)\nRTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst\nRTD| 0.460| 0.869| 9.210| 0| 0| -0.116| 17.025\nRTD| 0.478| 0.869| 8.599| 0| 0| -0.116| 17.025\nRTD| 0.511| 0.869| 8.744| 0| 0| -0.116| 17.025\nRTD| 0.494| 0.873| 9.376| 0| 0| -0.116| 17.025\nRTD| 0.499| 0.871| 9.029| 0| 0| -0.116| 17.025\nRTD| 0.523| 0.869| 8.698| 0| 0| -0.116| <strong>17.025<\/strong><\/pre>\n<p style=\"text-align: justify;\">Au bout de quatre heure et demi de travail, la variation maximale observ\u00e9e est de 17 micro-secondes, ce qui est excellent pour une Pandaboard. A titre d&rsquo;exemple, avec un noyau Linux 3.0 standard, j&rsquo;ai observ\u00e9 un retard maximal de plus de 500 micro-secondes (avec un timer cadenc\u00e9 \u00e0 la milli-seconde), et un d\u00e9calage maximal de 58 micro-secondes avec un noyau 3.0 auquel le patch Linux-rt a \u00e9t\u00e9 appliqu\u00e9.<\/p>","protected":false},"excerpt":{"rendered":"<p>L&rsquo;installation de la derni&egrave;re version de Xenomai (2.6.0) sur une carte Pandaboard ne devrait en principe pas pr&eacute;senter de difficult&eacute;s. En principe. Mais en pratique je crois &ecirc;tre tomb&eacute; dans tous les pi&egrave;ges possibles avant d&rsquo;arriver &agrave; faire fonctionner correctement mon syst&egrave;me. Je vous fais gr&acirc;ce de mes m&eacute;saventures, et voici donc un petit r&eacute;sum&eacute; [&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,14],"tags":[],"class_list":["post-1269","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-temps-reel"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1269","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=1269"}],"version-history":[{"count":3,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1269\/revisions"}],"predecessor-version":[{"id":6428,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1269\/revisions\/6428"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=1269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=1269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=1269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}