Xenomai sur Pandaboard

Publié par cpb
Nov 27 2011

L’installation de la dernière version de Xenomai (2.6.0) sur une carte Pandaboard ne devrait en principe pas présenter de difficultés. En principe. Mais en pratique je crois être tombé dans tous les pièges possibles avant d’arriver à faire fonctionner correctement mon système. Je vous fais grâce de mes mésaventures, et voici donc un petit résumé des opérations à réaliser pour pouvoir disposer de temps-réel strict sur la carte Pandaboard.

Chaîne de compilation

J’ai habituellement un regard assez dubitatif sur les personnes qui accusent le compilateur de ne pas fournir le code attendu. Il a quand même fallu que je finisse par me poser la question lorsque le noyau modifié et les bibliothèques Xenomai étaient incompatibles et que j’étais obligé de modifier manuellement des Makefile pour forcer la compilation. En fait les options de compilation de Xenomai (notamment FASTSYNCH) dépendent du type de processeur cible. Et ce dernier est déterminé en interrogeant le compilateur… Alors que dans le noyau Linux les options dépendent de la configuration choisie manuellement lors du make menuconfig.
Mon tort avait été d’utiliser une chaîne de compilation Arm générique, que j’avais préparée pour une carte IGEPv2 comme je l’avais décrit dans cet article.

Pour que la compilation des bibliothèques et applications Xenomai se passe bien, il faut utiliser une toolchain adaptée au processeur de la Pandaboard. Ce dernier est basé sur un coeur Cortex A9. Voici la préparation de la toolchain avec la dernière version de Buildroot.

[~]$ cd Projets/Panda/
[Panda]$ wget http://buildroot.uclibc.org/downloads/buildroot-2011.08.tar.bz2
--2011-11-27 06:52:17--  http://buildroot.uclibc.org/downloads/buildroot-2011.08.tar.bz2
Résolution de buildroot.uclibc.org... 140.211.167.224
Connexion vers buildroot.uclibc.org|140.211.167.224|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 1838467 (1,8M) [application/x-bzip2]
Sauvegarde en : «buildroot-2011.08.tar.bz2.1»

100%[=======================================================================>] 1 838 467   64,7K/s   ds 39s     

2011-11-27 06:52:57 (45,9 KB/s) - «buildroot-2011.08.tar.bz2.1» sauvegardé [1838467/1838467]

[Panda]$ tar xjf buildroot-2011.08.tar.bz2 
[Panda]$ cd buildroot-2011.08/
[buildroot-2011.08]$ wget https://www.blaess.fr/christophe/files/article-2011-11-27/config-buildroot-2011.08-Pandaboard
--2011-11-27 06:53:48--  https://www.blaess.fr/christophe/files/article-2011-11-27/config-buildroot-2011.08-Pandaboard
Résolution de www.blaess.fr... 217.16.3.18
Connexion vers www.blaess.fr|217.16.3.18|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 18679 (18K) [text/plain]
Sauvegarde en : «config-buildroot-2011.08-Pandaboard»

100%[=======================================================================>] 18 679      31,1K/s   ds 0,6s    

2011-11-27 06:53:49 (31,1 KB/s) - «config-buildroot-2011.08-Pandaboard» sauvegardé [18679/18679]

[buildroot-2011.08]$ mv config-buildroot-2011.08-Pandaboard .config
[buildroot-2011.08]$ make menuconfig

Éditez l’option « Host dir » du menu « Build options » pour choisir le chemin absolu d’installation de la toolchain. Par défaut le chemin est /home/cpb/cross-panda ce qui correspond à l’installation dans mon répertoire personnel. Pensez donc à l’adapter à votre environnement. Puis lancez la compilation avec

[buildroot-2011.08]$ make

La durée de cette étape varie très nettement suivant la puissance du processeur, l’activité du système et la vitesse du réseau. Disons qu’elle se mesure en dizaines de minutes. Elle nous fournira seulement la chaîne de compilation, je n’ai rien sélectionné d’autre dans la configuration de Buildroot (mais rien ne vous en empêche). La compilation se terminera ainsi :

[...]
for dir in ; 
	do 
		for lang in $(cd $dir; ls .|grep -v man); 
		do 
			grep -qx $lang /home/cpb/Projets/Panda/buildroot-2011.08/output/build/locales.nopurge || rm -rf $dir/$lang; 
		done; 
	done
rm -f /home/cpb/Projets/Panda/buildroot-2011.08/output/build/.fakeroot*
[buildroot-2011.08]$

Compilation du noyau Linux

Pour savoir quel noyau Linux utiliser, il nous faut d’abord télécharger la version désirée de Xenomai et regarder quels patches sont disponibles.

[~]$ cd ~/Projets/Panda/
[Panda]$ wget http://download.gna.org/xenomai/stable/xenomai-2.6.0.tar.bz2
--2011-11-27 07:23:30--  http://download.gna.org/xenomai/stable/xenomai-2.6.0.tar.bz2
Résolution de download.gna.org... 78.40.125.79
Connexion vers download.gna.org|78.40.125.79|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 21068430 (20M) [application/x-bzip2]
Sauvegarde en : «xenomai-2.6.0.tar.bz2»

100%[=========================================================================>] 21 068 430  54,5K/s   ds 3m 45s  

2011-11-27 07:27:16 (91,5 KB/s) - «xenomai-2.6.0.tar.bz2» sauvegardé [21068430/21068430]

[Panda]$ tar xjf xenomai-2.6.0.tar.bz2 
[Panda]$ ls xenomai-2.6.0/ksrc/arch/arm/patches/
adeos-ipipe-2.6.35.9-arm-1.18-03.patch  adeos-ipipe-2.6.37.6-arm-1.18-03.patch  adeos-ipipe-2.6.38.8-arm-1.18-04.patch  mxc  README
[Panda]$

La version 2.6.0 de Xenomai propose donc un patch pour le noyau Linux 2.6.38.8. Nous allons donc télécharger ce dernier.

[Panda]$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2
--2011-11-27 07:34:33--  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2
Résolution de www.kernel.org... 149.20.4.69
Connexion vers www.kernel.org|149.20.4.69|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 74811146 (71M) [application/x-bzip2]
Sauvegarde en : «linux-2.6.38.8.tar.bz2»

100%[=========================================================================>] 74 811 146  1,41M/s   ds 88s     

2011-11-27 07:36:01 (831 KB/s) - «linux-2.6.38.8.tar.bz2» sauvegardé [74811146/74811146]

[Panda]$ tar xjf linux-2.6.38.8.tar.bz2
[Panda]$

Ce noyau pose un souci pour la Pandaboard en ce qui concerne l’initialisation du limitateur de courant. La conséquence est que la carte risque de s’éteindre automatiquement dès que l’on exécute une opération qui réclame une augmentation de la consommation électrique (communication sur port série, etc.) Heureusement il existe un patch pour la série des Linux 2.6.38 permettant de corriger ce problème. J’ai passé quelques heures à modifier la configuration du noyau avant de le découvrir… Appliquons ce patch.

[Panda]$ cd linux-2.6.38.8/
[linux-2.6.38.8]$ wget https://www.blaess.fr/christophe/files/article-2011-11-27/pandaboard-current-2.6.38.patch
--2011-11-27 07:46:56--  https://www.blaess.fr/christophe/files/article-2011-11-27/pandaboard-current-2.6.38.patch
Résolution de www.blaess.fr... 217.16.3.18
Connexion vers www.blaess.fr|217.16.3.18|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 1745 (1,7K) [text/plain]
Sauvegarde en : «pandaboard-current-2.6.38.patch»

100%[==========================================================================>] 1 745       --.-K/s   ds 0s      

2011-11-27 07:46:56 (32,2 MB/s) - «pandaboard-current-2.6.38.patch» sauvegardé [1745/1745]

[linux-2.6.38.8]$ patch -p1 < pandaboard-current-2.6.38.patch 
patching file arch/arm/mach-omap2/board-omap4panda.c
[linux-2.6.38.8]$ cd ..
[Panda]$

Avant de compiler le noyau, il convient de le modifier pour y incorporer les ajouts de Xenomai (notamment ipipe, le pipeline d’interruption bas-niveau).

[Panda]$ cd xenomai-2.6.0/
[xenomai-2.6.0]$ 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
patching file arch/arm/Kconfig
patching file arch/arm/boot/compressed/head.S
patching file arch/arm/common/gic.c
patching file arch/arm/common/it8152.c
patching file arch/arm/common/timer-sp.c
[...]
patching file mm/mmu_context.c
patching file mm/mprotect.c
patching file mm/vmalloc.c
[xenomai-2.6.0]$ cd ..
[Panda]$

Puis compilons enfin notre noyau Linux modifié. Pour cela j’ai préparé rapidement un fichier de configuration qui pourrait être nettement amélioré. J’en profite également pour renommer le répertoire afin de pouvoir éventuellement disposer d’une version 2.6.38.8 sans Xenomai pour comparaison.

[Panda]$ mv linux-2.6.38.8 linux-2.6.38.8-xenomai
[Panda]$ cd linux-2.6.38.8-xenomai/
[linux-2.6.38.8-xenomai]$ wget https://www.blaess.fr/christophe/files/article-2011-11-27/config-linux-2.6.38.8-xenomai
--2011-11-27 08:00:43--  https://www.blaess.fr/christophe/files/article-2011-11-27/config-linux-2.6.38.8-xenomai
Résolution de www.blaess.fr... 217.16.3.18
Connexion vers www.blaess.fr|217.16.3.18|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 66509 (65K) [text/plain]
Sauvegarde en : «config-linux-2.6.38.8-xenomai»

100%[==========================================================================>] 66 509       260K/s   ds 0,2s    

2011-11-27 08:00:43 (260 KB/s) - «config-linux-2.6.38.8-xenomai» sauvegardé [66509/66509]

[linux-2.6.38.8-xenomai]$ mv config-linux-2.6.38.8-xenomai .config
[linux-2.6.38.8-xenomai]$ make ARCH=arm menuconfig

En vous promenant dans le menu de configuration, vous apercevrez un nouveau sous-menu « Realtime Subsystem » correspondant à la configuration de Xenomai notamment de ses « skins » qui permettent de reproduire l’interface de programmation de différents systèmes temps-réel (RTAI, VxWorks, pSos+, etc.). Nous pouvons à présent lancer la compilation du noyau.

[linux-2.6.38.8-xenomai]$ make ARCH=arm CROSS_COMPILE=~/cross-panda/usr/bin/arm-linux- uImage modules
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
[...]
  CC      fs/nls/nls_iso8859-15.mod.o
  LD [M]  fs/nls/nls_iso8859-15.ko
  CC      fs/nls/nls_utf8.mod.o
  LD [M]  fs/nls/nls_utf8.ko
  CC      net/bluetooth/l2cap.mod.o
  LD [M]  net/bluetooth/l2cap.ko
  IHEX    firmware/kaweth/new_code.bin
  IHEX    firmware/kaweth/trigger_code.bin
  IHEX    firmware/kaweth/new_code_fix.bin
  IHEX    firmware/kaweth/trigger_code_fix.bin
[linux-2.6.38.8-xenomai]$

Installation du noyau modifie

Pour l’installation, j’insère la carte micro-SD de la Pandaboard dans un connecteur sur mon poste de travail, où le système de fichiers principal se trouve monté en /media/root et la partition de démarrage (contenant le bootloader) sur /media/boot. Sur ma carte se trouve un système de fichiers minimal avec une configuration de Busybox et Dropbear comme décrit dans cet article et celui-ci.

Attention, si vous avez déjà installé une toolchain en suivant mes premiers articles sur la Pandaboard, il faut absolument installer les nouvelles bibliothèques sinon vous ne pourrez pas utiliser celles de Xenomai (et resterez bloqués comme moi pendant plusieurs heures à jouer à tort sur sa configuration). Il faut donc les copier ainsi :

[linux-2.6.38.8-xenomai]$ rm -rf /media/root/lib/*
[linux-2.6.38.8-xenomai]$ cp -Rdp ~/cross-panda/usr/arm-linux/sysroot/lib /media/root/
[linux-2.6.38.8-xenomai]$

On peut installer le noyau et ses modules ainsi :

[linux-2.6.38.8-xenomai]$ cp arch/arm/boot/uImage /media/boot/
[linux-2.6.38.8-xenomai]$ make ARCH=arm INSTALL_MOD_PATH=/media/root/ modules_install
  INSTALL drivers/hid/hid-gaff.ko
  INSTALL drivers/hid/hid-samsung.ko
  INSTALL drivers/hid/hid-sjoy.ko
  [...]
  INSTALL /media/root//lib/firmware/kaweth/trigger_code.bin
  INSTALL /media/root//lib/firmware/kaweth/new_code_fix.bin
  INSTALL /media/root//lib/firmware/kaweth/trigger_code_fix.bin
  DEPMOD  2.6.38.8-xenomai-cpb
[linux-2.6.38.8-xenomai]$ umount /media/*oot
[linux-2.6.38.8-xenomai]$

Après avoir démarré la Pandaboard, et s’être connecté par SSHs, nous observons deux nouvelles entrées dans /proc.

[Panda]# ls /proc/ipipe/
Linux    Xenomai  version
[Pandaboard]# ls /proc/xenomai/
acct          apc           heap          irq           lock          sched         stat          timer         version
affinity      faults        interfaces    latency       registry      schedclasses  timebases     timerstat
[Pandaboard]#

La première correspond à Adeos (renommé ipipe pour interrupt pipeline) et la seconde au domaine de Xenomai, dans lequel seront ordonnancées les futures tâches temps-réel.

Bibliothèques de Xenomai

Les bibliothèques de Xenomai doivent être compilées et installées pour que les tâches de l’espace utilisateur puissent accéder aux fonctionnalités temps-réel. Certaines options de configuration ont changé depuis les dernières versions de Xenomai (notamment l’option --enable-smp dont je cherchais en vain la présence dans la configuration du kernel).

Pour compiler ces bibliothèques nous utiliserons les manipulations suivantes. Attention, dans la ligne « ./configure« , précisez le chemin dans lequel les bibliothèques et exécutables de Xenomai seront installés sur votre poste de développement (en modifiant donc le chemin qui est prévu pour mon répertoire).

[Panda]$ cd xenomai-2.6.0/
[xenomai-2.6.0]$ PATH=$PATH:~/cross-panda/usr/bin/
[xenomai-2.6.0]$ ./configure --prefix=/home/cpb/Projets/Panda/xenomai --host=arm-linux CFLAGS='-march=armv7-a' LDFLAGS='-march=armv7-a' --enable-smp
configure: WARNING: if you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used
checking build system type... i686-pc-linux-gnu
checking host system type... arm-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking for arm-linux-gcc... arm-linux-gcc
checking whether the C compiler works... yes
[...]
config.status: executing depfiles commands
config.status: executing libtool commands
[xenomai-2.6.0]$ make 
Making all in src
make[1]: entrant dans le répertoire « /home/cpb/Projets/Panda/xenomai-2.6.0/src »
Making all in include
[...]
make[1]: entrant dans le répertoire « /home/cpb/Projets/Panda/xenomai-2.6.0 »
make[1]: Rien à faire pour « all-am ».
make[1]: quittant le répertoire « /home/cpb/Projets/Panda/xenomai-2.6.0 »
[xenomai-2.6.0]$ make install
[...]
make[2]: Rien à faire pour « install-data-am ».
make[2]: quittant le répertoire « /home/cpb/Projets/Panda/xenomai-2.6.0 »
make[1]: quittant le répertoire « /home/cpb/Projets/Panda/xenomai-2.6.0 »
[xenomai-2.6.0]$ cd ..
[Panda]$

Transférons les exécutables et les bibliothèques en utilisant scp (s’il n’est pas installé sur votre Pandaboard, faites une copie directe avec la carte micro-SD).

[Panda]$ cd xenomai
[xenomai]$ ls
bin  include  lib  sbin  share
[xenomai]$ scp -r bin/ lib/ sbin/ root@192.168.3.152:/usr/
root@192.168.3.152's password:
xeno-test-run-wrapper                                                100%  181     0.2KB/s   00:00
xeno-test-run                                                        100%   17KB  17.3KB/s   00:00
insn_read                                                            100%   14KB  14.1KB/s   00:00
[...]
analogy_config                                                       100% 9300     9.1KB/s   00:00
rtcanconfig                                                          100% 8493     8.3KB/s   00:00
rtps                                                                 100%   22KB  22.2KB/s   00:00
[xenomai]$

Test de Xenomai

Après s’être connecté sur Xenomai, nous pouvons lancer les tests se trouvant installés dans le répertoire /usr/bin. Il y en a plusieurs que je vous laisse découvrir, voyons juste le résultat d’un outil que j’aime bien : cyclictest qui mesure la variabilité des timers. Il en existe une version utilisant l’API système Linux classique (que l’on trouve dans le projet Linux-rt) et un portage utilisant l’API de Xenomai. Voyons un exemple où nous déclenchons un timer toutes les 100 micro-secondes et observons le jitter.

[Panda]# cd /usr/bin
[Panda]# ./cyclictest -i 100
0.47 0.17 0.09 1/50 11834          

T: 0 (11809) P:99 I:     100 C: 2372138 Min:       0 Act:       4 Avg:       0 Max:      17

En outre, l’utilitaire latency donne des résultats comparables.

[Panda]# ./latency -p 100
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:01 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 0.652| 0.837| 9.404| 0| 0| 0.652| 9.404
RTD| 0.498| 0.857| 8.105| 0| 0| 0.498| 9.404
[...]
RTT| 04:28:07 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 0.460| 0.869| 9.210| 0| 0| -0.116| 17.025
RTD| 0.478| 0.869| 8.599| 0| 0| -0.116| 17.025
RTD| 0.511| 0.869| 8.744| 0| 0| -0.116| 17.025
RTD| 0.494| 0.873| 9.376| 0| 0| -0.116| 17.025
RTD| 0.499| 0.871| 9.029| 0| 0| -0.116| 17.025
RTD| 0.523| 0.869| 8.698| 0| 0| -0.116| 17.025

Au bout de quatre heure et demi de travail, la variation maximale observée est de 17 micro-secondes, ce qui est excellent pour une Pandaboard. A titre d’exemple, avec un noyau Linux 3.0 standard, j’ai observé un retard maximal de plus de 500 micro-secondes (avec un timer cadencé à la milli-seconde), et un décalage maximal de 58 micro-secondes avec un noyau 3.0 auquel le patch Linux-rt a été appliqué.

5 Réponses

  1. gch dit :

    Bonjour,

    la version 2.6.0 est sensée simplifier la configuration sur ARM en allant chercher les options du compilateur. Je serais intéressé par une description plus détaillé des problèmes que vous avez eu avec les FASTSYNCH et l’option –enable-smp (qui est toujours présente, et même obligatoire si vous compilez le kernel pour omap4 avec CONFIG_SMP, normalement).

    D’avance merci.
    Cordialement.

    • cpb dit :

      Bonjour Gilles,

      Et tout d’abord merci pour votre travail sur Xenomai en général et sur l’architecture Arm en particulier.

      Je trouve que la configuration pour 2.6.0 est effectivement plus simple qu’auparavant, mais j’étais habitué à utiliser Xenomai sur des cartes Igep v2 (Cortex A8 sans smp), et la force de l’inertie m’a entraîné à tenter d’utiliser les mêmes options et outils qu’avec la version 2.5.6.

      Ainsi je n’employais précédemment pas l’option --enable-smp que j’ai mis un moment à découvrir. Ensuite j’ai pensé qu’elle avait disparu comme --enable-arm-eabi ou --enable-arm-mach.
      En outre mon cross-compiler (issu de Buildroot) était prévu pour Arm-Generic et s’affichait donc comme un Arm v5 !

      $ touch a.c
      $ /cross-arm-linux/usr/bin/arm-linux-gcc -dM -E a.c
      […]
      #define __ARM_ARCH_5T__ 1
      […]
      $

      Avec un cross-compiler correctement ajusté pour la Pandaboard, j’obtiens :
      $ /cross-panda-linux/usr/bin/arm-linux-gcc -dM -E a.c
      […?]
      #define __ARM_ARCH_7A__ 1
      […]
      $

      Et cette fois l’option CONFIG_XENO_FASTSYNCH est correctement renseignée.

      Merci encore,

      Cordialement.

      • gch dit :

        Normalement, les armv5 supportent aussi les fastsynch, mais pas en SMP, c’est donc la configuration armv5 + smp qui devait poser problème.

        Il devrait être possible d’utiliser n’importe quelle toolchain pourvu qu’on force la bonne version d’architecture en passant -march=armv7-a dans les CFLAGS.

        Le cortex a8 est lui aussi un armv7, donc il nécessite les mêmes flags que le cortex a9.

        À noter aussi que les omap3 et 4 ont une FPU, pour en profiter, il faut compiler avec -mfpu=vfp -mfloat-abi=softfp, chose que faisait la version précédente de xenomai et que 2.6.0 ne fait plus.

        Enfin, 17us est un peu optimiste comme latence. En chargeant un peu la panda, on arrive plutôt dans les environs de 50us. xenomai 2.6.0 fournit le script « dohell » qui génère une charge importante en utilisant plusieurs moyens (cf dohell –help), ainsi que le script xeno-test qui se charge de lancer latency et dohell.

        • cpb dit :

          Oui les 17 micro-secondes étaient obtenues dans des conditions de charge faible. Avec dohell en parallèle j’ai obtenu une latence de 44 microsecondes (de mémoire).

  2. Christian dit :

    Bonjour,

    J’ai suivi ce tutoriel, qui est au passage très bien mené, tout fonctionne correctement, j’obtiens les mêmes resultats.

    Mais le souci c’est que lors de la commande ‘make’ de la partie « Bibliothèques de Xenomai » après l’exécution de ‘./configure –prefix=/home/cpb/Projets/Panda/xenomai –host=arm-linux CFLAGS=’-march=armv7-a’ LDFLAGS=’-march=armv7-a’ –enable-smp’ en remplaçant le répertoire avec celui que j’utilise, j’obtiens des erreurs que je n’arrive pas à comprendre.

    J’obtiens :

    root@flutronic-desktop:/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0# sudo make
    Making all in src
    make[1]: Entering directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src’
    Making all in include
    make[2]: Entering directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/include’
    make all-am
    make[3]: Entering directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/include’
    make[3]: Leaving directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/include’
    make[2]: Leaving directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/include’
    Making all in skins
    make[2]: Entering directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/skins’
    Making all in common
    make[3]: Entering directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/skins/common’
    /bin/bash ../../../libtool –tag=CC –mode=compile gcc -DHAVE_CONFIG_H -I. -I../../../src/include -O2 -D_GNU_SOURCE -D_REENTRANT -Wall -Werror-implicit-function-declaration -pipe -D__XENO__ -D__IN_XENO__ -Wstrict-prototypes -I../../../include -march=armv7-a -MT libxenomai_la-rt_print.lo -MD -MP -MF .deps/libxenomai_la-rt_print.Tpo -c -o libxenomai_la-rt_print.lo `test -f ‘rt_print.c’ || echo ‘./’`rt_print.c
    libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../../src/include -O2 -D_GNU_SOURCE -D_REENTRANT -Wall -Werror-implicit-function-declaration -pipe -D__XENO__ -D__IN_XENO__ -Wstrict-prototypes -I../../../include -march=armv7-a -MT libxenomai_la-rt_print.lo -MD -MP -MF .deps/libxenomai_la-rt_print.Tpo -c rt_print.c -fPIC -DPIC -o .libs/libxenomai_la-rt_print.o
    {standard input}: Assembler messages:
    {standard input}:313: Error: thumb conditional instruction should be in IT block — `strexeq r0,r1,[r3]’
    {standard input}:573: Error: thumb conditional instruction should be in IT block — `strexeq r0,r1,[r3]’
    make[3]: *** [libxenomai_la-rt_print.lo] Error 1
    make[3]: Leaving directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/skins/common’
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src/skins’
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/home/flutronic/Documents/flutronic/timer_xenomai/xenomai/xenomai-2.6.0/src’
    make: *** [all-recursive] Error 1

    J’ai recommencé plusieurs fois chaque étape pensant que j’avais commis une erreur dans l’exécution des commandes mais rien y fait.

    Pourriez-vous me dire pourquoi ces erreurs apparaissent et comment pourrais-je y remédier ?

    En vous remerciant,

    Christian

URL de trackback pour cette page