{"id":1331,"date":"2011-12-28T11:33:30","date_gmt":"2011-12-28T10:33:30","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=1331"},"modified":"2011-12-28T11:33:30","modified_gmt":"2011-12-28T10:33:30","slug":"xenomai-2-6-0-sur-ubuntu-11-10","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/12\/28\/xenomai-2-6-0-sur-ubuntu-11-10\/","title":{"rendered":"Xenomai 2.6.0 sur Ubuntu 11.10"},"content":{"rendered":"<p style=\"text-align: justify;\">J&rsquo;ai voulu comparer certains r\u00e9sultats obtenus avec <a title=\"Xenomai sur Pandaboard\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/11\/27\/xenomai-sur-pandaboard\/\">Xenomai sur une carte Pandaboard<\/a> avec ceux d&rsquo;un PC classique. J&rsquo;ai choisi un poste de travail (type bureautique) fonctionnant avec une distribution Ubuntu r\u00e9cente, afin de disposer d&rsquo;une configuration la plus courante possible.<\/p>\n<p>\n<!--more-->\n<\/p>\n<h1>Installation de Xenomai 2.6.0 sur Ubuntu 11.10<\/h1>\n<p style=\"text-align: justify;\">La m\u00e9thode d&rsquo;installation est assez simple, mais je la d\u00e9cris ici afin de regrouper les options de compilation et les fichiers de configuration du noyau.<\/p>\n<h2>Pr\u00e9paration des sources de Linux<\/h2>\n<p>Les sources de <a title=\"http:\/\/download.gna.org\/xenomai\/stable\/xenomai-2.6.0.tar.bz2\" href=\"http:\/\/download.gna.org\/xenomai\/stable\/xenomai-2.6.0.tar.bz2\">Xenomai 2.6.0<\/a> et de <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\">Linux 2.6.38.8<\/a> sont pr\u00e9alablement t\u00e9l\u00e9charg\u00e9es dans mon r\u00e9pertoire personnel (<code>~cpb\/<\/code>)<\/p>\n<pre>[~]$ <strong>sudo -i<\/strong>\n[sudo] password for cpb:\n[~]# <strong>cd \/usr\/src\/<\/strong>\n[src]# <strong>tar -xjf ~cpb\/xenomai-2.6.0.tar.bz2<\/strong>\n[src]# <strong>tar -xjf ~cpb\/linux-2.6.38.8.tar.bz2<\/strong>\n[src]# <strong>mv linux-2.6.38.8 linux-2.6.38.8-xenomai<\/strong>\n[src]# <strong>xenomai-2.6.0\/scripts\/prepare-kernel.sh --linux=\/usr\/src\/linux-2.6.38.8-xenomai --adeos=xenomai-2.6.0\/ksrc\/arch\/x86\/patches\/adeos-ipipe-2.6.38.8-x86-2.10-01.patch --arch=i686<\/strong>\npatching file arch\/x86\/Kconfig\npatching file arch\/x86\/include\/asm\/apic.h\npatching file arch\/x86\/include\/asm\/apicdef.h\n[...]\npatching file mm\/mmu_context.c\npatching file mm\/mprotect.c\npatching file mm\/vmalloc.c\n[src]#<\/pre>\n<p style=\"text-align: justify;\">Nous disposons donc des r\u00e9pertoires<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>\/usr\/src\/xenomai-2.6.0<\/code> : contenant entre autres les sources des biblioth\u00e8ques de Xenomai (que nous compilerons en second lieu);<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><code>\/usr\/src\/linux-2.6.38.8-xenomai<\/code> : les sources du noyau Linux modifi\u00e9 par le patch Adeos\/Xenomai.<\/li>\n<\/ul>\n<h2>Compilation du noyau<\/h2>\n<p style=\"text-align: justify;\">Je pars de la <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-12-28\/config-2.6.38-11-generic\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-12-28\/config-2.6.38-11-generic\" target=\"_blank\">configuration du noyau Linux 2.6.38<\/a> telle qu&rsquo;elle \u00e9tait fournie avec Ubuntu, puis je la modifierai pour ajuster certains param\u00e8tres \u00e0 Xenomai.<\/p>\n<pre>[src]# <strong>cd \/usr\/src\/linux-2.6.38.8-xenomai\/<\/strong>\n[linux-2.6.38.8-xenomai]# <strong>cp \/boot\/<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-12-28\/config-2.6.38-11-generic\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-12-28\/config-2.6.38-11-generic\" target=\"_blank\">config-2.6.38-11-generic<\/a> .\/.config<\/strong>\n[linux-2.6.38.8-xenomai]# <strong>make menuconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">Dans le menu de configuration, il faut r\u00e9aliser quelques modifications.<\/p>\n<pre>General setup --&gt;\n    &lt;*&gt; Kernel .config support\n    [*]  Enable access to .config through \/proc\/config.gz<\/pre>\n<p style=\"text-align: justify;\">Ceci est juste un \u00e9l\u00e9ment de confort afin de retrouver facilement le fichier <code>.config<\/code> du noyau (dans <code>\/proc\/config.gz<\/code>). Je l&rsquo;utilise syst\u00e9matiquement, sauf dans le cas d&rsquo;un syst\u00e8me embarqu\u00e9 avec de fortes contraintes de taille m\u00e9moire.<\/p>\n<pre>Processor type and features --&gt;\n    Processor family (Core 2\/newer Xeon) --&gt;<\/pre>\n<p style=\"text-align: justify;\">Configurez le type de processeur en fonction de votre machine (et pas de la mienne&#8230;). Vous pouvez trouver cette information dans <code>\/proc\/cpuinfo<\/code>.<\/p>\n<pre>Processor type and features --&gt;\n    [ ] Enable -fstack-protector buffer overflow detection<\/pre>\n<pre>Power managment and ACPI options --&gt;\n    ACPI Support --&gt;\n        &lt; &gt; Processor<\/pre>\n<pre>Power managment and ACPI options --&gt;\n    &lt; &gt; APM<\/pre>\n<pre>Power managment and ACPI options --&gt;\n    CPU frequency scaling --&gt;\n        [ ] CPU frequency scaling<\/pre>\n<pre>Power managment and ACPI options --&gt;\n    [ ] Cpuidle Driver for Intel Processors<\/pre>\n<pre>Processor type and features --&gt;\n    Preemption Model  --&gt;\n        (X) Preemptible Kernel (Low-Latency Desktop)<\/pre>\n<p style=\"text-align: justify;\">Le fichier <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-12-28\/config-2.6.38.8-xenomai\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-12-28\/config-2.6.38.8-xenomai\" target=\"_blank\">.config<\/a> \u00e9tant pr\u00e9par\u00e9, nous pouvons d\u00e9marrer la compilation en utilisant la m\u00e9thode Debian \/ Ubuntu.<\/p>\n<pre>[linux-2.6.38.8-xenomai]# <strong>make-kpkg --append-to-version -xenomai --initrd buildpackage<\/strong>\nexec make kpkg_version=12.036+nmu1 -f \/usr\/share\/kernel-package\/ruleset\/minimal.mk debian APPEND_TO_VERSION=-xenomai  INITRD=YES\n====== making target debian\/stamp\/conf\/minimal_debian [new prereqs: ]======\n[...]\ntest ! -f scripts\/package\/builddeb.kpkg-dist ||\tmv -f scripts\/package\/builddeb.kpkg-dist scripts\/package\/builddeb\ntest ! -f scripts\/package\/Makefile.kpkg-dist ||\tmv -f scripts\/package\/Makefile.kpkg-dist scripts\/package\/Makefile\necho done &gt;  debian\/stamp\/build\/buildpackage\n[linux-2.6.38.8-xenomai]#<\/pre>\n<p style=\"text-align: justify; padding-left: 30px;\">Sur un syst\u00e8me avec <em><code>n<\/code><\/em> CPUs, il est possible de lancer plusieurs t\u00e2ches de compilation en parall\u00e8le en ajoutant l&rsquo;option <code>CONCURRENCY_LEVEL=<em>n<\/em><\/code> avant <code>make-kpkg<\/code>. Voir <a title=\"Parall\u00e9lisation de compilations\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/01\/14\/parallelisation-de-compilations\/\" target=\"_blank\">cet article<\/a> pour un aper\u00e7u des gains de temps de compilation.<\/p>\n<p style=\"text-align: justify;\">La compilation cr\u00e9e dans le r\u00e9pertoire <code>\/usr\/src<\/code> les packages <code>.deb<\/code> correspondant au nouveau kernel. Installons-les.<\/p>\n<pre>[linux-2.6.38.8-xenomai]# <strong>cd \/usr\/src<\/strong>\n[src]# <strong>dpkg -i *xenomai*deb<\/strong>\nS\u00e9lection du paquet linux-doc-2.6.38.8-xenomai pr\u00e9c\u00e9demment d\u00e9s\u00e9lectionn\u00e9.\n(Lecture de la base de donn\u00e9es... 306802 fichiers et r\u00e9pertoires d\u00e9j\u00e0 install\u00e9s.)\n[...]\nParam\u00e9trage de linux-source-2.6.38.8-xenomai (2.6.38.8-xenomai-10.00.Custom) ...\ndpkg\u00a0: avertissement\u00a0:\u00a0option obsol\u00e8te \u00ab\u00a0--print-installation-architecture\u00a0\u00bb, veuillez utiliser \u00ab\u00a0--print-architecture\u00a0\u00bb \u00e0 la place.\nExamining \/etc\/kernel\/src_postinst.d.\n[src]#<\/pre>\n<p style=\"text-align: justify;\">Et red\u00e9marrons sur le nouveau noyau.<\/p>\n<pre>[src]# <strong>\/sbin\/reboot<\/strong><\/pre>\n<p style=\"text-align: justify;\">Au moment du red\u00e9marrage, il est n\u00e9cessaire de choisir dans le menu de Grub \u00ab\u00a0<em>Previous Linux versions<\/em>\u00a0\u00bb puis \u00ab\u00a0<em>Ubuntu, avec Linux 2.6.38.8-xenomai<\/em>\u00ab\u00a0. Une fois le syst\u00e8me d\u00e9marr\u00e9, nous pouvons v\u00e9rifier que tout va bien&nbsp;:<\/p>\n<pre>[~]# <strong>uname -a<\/strong>\nLinux Logilin-A131 2.6.38.8-xenomai #1 SMP PREEMPT Wed Dec 28 11:05:33 CET 2011 i686 i686 i386 GNU\/Linux\n[~]# <strong>dmesg | grep I-pipe<\/strong>\n[    0.000000] I-pipe 2.10-01: pipeline enabled.\n[    2.378745] I-pipe: Domain Xenomai registered.\n[~]# <strong>dmesg | grep Xenomai<\/strong>\n[    2.378745] I-pipe: Domain Xenomai registered.\n[    2.378882] Xenomai: hal\/i386 started.\n[    2.378923] Xenomai: scheduling class idle registered.\n[    2.378930] Xenomai: scheduling class rt registered.\n[    2.380254] Xenomai: real-time nucleus v2.6.0 (Movin' On) loaded.\n[    2.380257] Xenomai: debug mode enabled.\n[    2.380508] Xenomai: starting native API services.\n[    2.380510] Xenomai: starting POSIX services.\n[    2.380543] Xenomai: starting RTDM services.\n[~]# <strong>cat \/proc\/ipipe\/version<\/strong>\n2.10-01\n[~]# <strong>cat \/proc\/xenomai\/version<\/strong>\n2.6.0\n[~]#<\/pre>\n<h2>Compilation des biblioth\u00e8ques de Xenomai<\/h2>\n<p style=\"text-align: justify;\">Les options de configuration sont assez sensibles pour le bon fonctionnement des applications. Celles utilis\u00e9es ci-dessous correspondent \u00e0 la compilation du noyau avec le fichier de configuration indiqu\u00e9 plus haut. Il peut s&rsquo;av\u00e9rer n\u00e9cessaire de jouer sur les options <code>--enable-smp<\/code> <code>--enable-x86-tsc<\/code> et <code>--enable-x86-sep<\/code> pour ajuster le comportement.<\/p>\n<p style=\"text-align: justify; padding-left: 30px;\">L&rsquo;option <code>--enable-x86-sep<\/code> sert sur les processeurs o\u00f9 la biblioth\u00e8que C peut utiliser le m\u00e9canisme <code>SYSENTER<\/code>\/<code>SYSEXIT<\/code> pour invoquer les appels-syst\u00e8me plut\u00f4t que le principe des trappes <code>INT 0x80<\/code>. La biblioth\u00e8que NPTL sera n\u00e9cessaire pour fournir les points d&rsquo;entr\u00e9e dans le noyau.<\/p>\n<pre>[~]# <strong>cd \/usr\/src\/xenomai-2.6.0\/<\/strong>\n[xenomai-2.6.0]# <strong>export CFLAGS=-fno-omit-frame-pointer<\/strong>\n[xenomai-2.6.0]# <strong>.\/configure --enable-smp --enable-x86-sep --enable-x86-tsc --enable-debug<\/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\n[...]\nconfig.status: executing depfiles commands\nconfig.status: executing libtool commands\n[xenomai-2.6.0]# <strong>make install<\/strong>\nMaking install in src\nmake[1]: entrant dans le r\u00e9pertoire \u00ab \/usr\/src\/xenomai-2.6.0\/src \u00bb\n[...]\nmake[2]: quittant le r\u00e9pertoire \u00ab \/usr\/src\/xenomai-2.6.0 \u00bb\nmake[1]: quittant le r\u00e9pertoire \u00ab \/usr\/src\/xenomai-2.6.0 \u00bb\n[xenomai-2.6.0]#<\/pre>\n<h2>Tests<\/h2>\n<p style=\"text-align: justify;\">Pour tester le bon fonctionnement de Xenomai, quelques outils de mesure sont livr\u00e9s avec le syst\u00e8me.<\/p>\n<pre>[xenomai-2.6.0]# <strong>cd \/usr\/xenomai\/bin\/<\/strong>\n[bin]# <strong>export LD_LIBRARY_PATH=\/usr\/xenomai\/lib\/<\/strong>\n[bin]# <strong>.\/cyclictest <\/strong>\n0.06 0.26 0.25 1\/387 25025          \n\nT: 0 (25019) P:99 I: 1000000 C:      26 Min:       4 Act:      15 Avg:      15 Max:      35\n  <strong>(<em>Contr\u00f4le-C<\/em>)<\/strong>\n[bin]# <strong>.\/latency<\/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|     -1.449|      2.415|     19.886|       0|     0|     -1.449|     19.886\nRTD|     -1.470|      2.412|     19.979|       0|     0|     -1.470|     19.979\nRTD|     -1.456|      2.384|     15.410|       0|     0|     -1.470|     19.979\nRTD|     -1.668|      2.401|     20.585|       0|     0|     -1.668|     20.585\nRTD|     -1.445|      2.364|     18.106|       0|     0|     -1.668|     20.585\nRTD|     -1.671|      2.377|     18.016|       0|     0|     -1.671|     20.585\nRTD|     -1.475|      2.384|     19.541|       0|     0|     -1.671|     20.585\nRTD|     -1.470|      2.356|     17.344|       0|     0|     -1.671|     20.585\nRTD|     -1.483|      2.418|     20.039|       0|     0|     -1.671|     20.585\nRTD|     -1.469|      2.374|     14.998|       0|     0|     -1.671|     20.585\n  <strong>(<em>Contr\u00f4le-C<\/em>)<\/strong>\n---|-----------|-----------|-----------|--------|------|-------------------------\nRTS|     -1.671|      2.388|     20.585|       0|     0|    00:00:10\/00:00:10\n[bin]#<\/pre>\n<p style=\"text-align: justify;\">Naturellement, pour valider une configuration temps-r\u00e9el, il faudra ex\u00e9cuter ces tests pendant des dur\u00e9es tr\u00e8s longues, avec une charge syst\u00e8me importante et une activit\u00e9 intense des p\u00e9riph\u00e9riques.<\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Je ne conseille pas d&rsquo;installer Xenomai sur un poste de travail bureautique, ceci ne pr\u00e9sente pas d&rsquo;int\u00e9r\u00eat et peut m\u00eame diminuer (tr\u00e8s l\u00e9g\u00e8rement) les performances moyennes. L&rsquo;int\u00e9r\u00eat d&rsquo;un environnement temps-r\u00e9el strict comme Xenomai appara\u00eet sur des syst\u00e8mes industriels ou scientifiques ayant des contraintes temporelles fortes dans leurs interactions avec des p\u00e9riph\u00e9riques externes. Pour ce type d&rsquo;applications (employant g\u00e9n\u00e9ralement des cartes embarqu\u00e9es sp\u00e9cifiques ou des PC industriels durcis), on emploie souvent des installations Linux personnalis\u00e9es plut\u00f4t que des distributions grand public. Toutefois, je trouve tr\u00e8s int\u00e9ressant de pouvoir disposer de Xenomai et de tous son environnement de fonctionnement directement sur le poste du d\u00e9veloppeur, permettant ainsi des tests rapides des applications sans n\u00e9cessiter un transfert syst\u00e9matique sur la machine cible.<\/p>","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai voulu comparer certains r&eacute;sultats obtenus avec Xenomai sur une carte Pandaboard avec ceux d&rsquo;un PC classique. J&rsquo;ai choisi un poste de travail (type bureautique) fonctionnant avec une distribution Ubuntu r&eacute;cente, afin de disposer d&rsquo;une configuration la plus courante possible.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,14],"tags":[],"class_list":["post-1331","post","type-post","status-publish","format-standard","hentry","category-linux-2","category-temps-reel"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1331","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=1331"}],"version-history":[{"count":0,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1331\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=1331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=1331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=1331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}