installation de Xenomai
Transcript of installation de Xenomai
UNIVERSITÉ HASSAN 1ER SETTATECOLE NATIONALE DES SCIENCES APPLIQUÉES
KHOURIBGA
2ÉMÉ ANNÉE CYCLE INGÉNIEUR GÉNIE ELECTRIQUE
TEMPS REEL SYSTEMESTRAVAUX PRATIQUES
TEMPS REEL
SYSTEMES
TRAVAUX PRATIQUES
YACINE A. AMKASSOU
REALISER PAR
YACINE ABDSSALAMAMKASSOU
ENCADRE PAR
2013-2014
MR. ISMAIL LAGRAT
INSTALLATION DE XENOMAI 2.6.2.1 SUR UBUNTU 12.10TESTS TEMPS RÉEL SUR XENOMAI API
2013-2014
Xenomai est un socle applicatif qui permet de développer des applications temps réel. Pour faire bref,
c'est un noyau temps réel qui se juxtapose au noyau Linux qui lui a un fonctionnement en temps partagé.
Xenomai offre plusieurs API native, posix, vrtx, … L'application peut s'exécuter dans l'espace utilisateur ou
l'espace noyau.
Xenomai est sous licence GPL.
Les sources utiliser dans ce tp sont linux-2.6.38.8 et xenomai-2.6.2.1
Création du dossier de travail par le root :
Décompression du deux fichiers :
Pour « patching » le noyau il faut travailler dans /usr/src
Nous disposons donc des répertoires
/usr/src/xenomai-2.6.2.1 : contenant entre autres les sources des bibliothèques de Xenomai (que
nous compilerons en second lieu);
/usr/src/linux-2.6.38.8-xenomai : les sources du noyau Linux modifié par le patch
Adeos/Xenomai.
Je pars de la configuration du noyau Linux 2.6.38 telle qu’elle était fournie avec Ubuntu, puis je la modifierai pour
ajuster certains paramètres à Xenomai.
Comme indiquer ici pour exécuter la commande menuconfig il faut d’abord installer la bibliothèque de nurse-devs
linux-2.6.38.8-xenomai]# make menuconfig
Ceci est juste un élément de confort afin de retrouver facilement le fichier .config du noyau (dans /proc/config.gz).
Je l’utilise systématiquement, sauf dans le cas d’un système embarqué avec de fortes contraintes de taille mémoire.
Pour obtenir le type de processeur de mon machine /proc/cpuinfo.
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz Processor type and features -->
Processor family
Power managment and ACPI options -->
ACPI Support -->
o < > Processor
Power managment and ACPI options -->
< > APM
Power managment and ACPI options -->
CPU frequency scaling -->
o [ ] CPU frequency scaling
Power managment and ACPI options -->
[ ] Cpuidle Driver for Intel Processors
Processor type and features -->
Preemption Model -->
o (X) Preemptible Kernel (Low-Latency Desktop)
Le fichier .config étant préparé, nous pouvons démarrer la compilation en utilisant la méthode Debian / Ubuntu.
Afin de pouvoir installer le programme make-kpkg on fait une update a la package de apt-get
apt-get update
Installation de make-kpkg apt-get install make-kpkg
Compilation du kernel make-kpkg --append-to-version -xenomai --initrd buildpackage
La compilation crée dans le répertoire /usr/src les packages .deb correspondant au nouveau kernel.
Installons-les.
Décompression du nouveau noyau
dpkg -i *xenomai*deb
Une fois le système démarré, nous pouvons vérifier que tout va bien :
[~]# dmesg | grep I-pipe
[~]# dmesg | grep Xenomai
[~]# cat /proc/ipipe/version
[~]# cat /proc/xenomai/version
Les options de configuration sont assez sensibles pour le bon fonctionnement des applications. Celles utilisées
ci-dessous correspondent à la compilation du noyau avec le fichier de configuration indiqué plus haut. Il peut
s’avérer nécessaire de jouer sur les options --enable-smp --enable-x86-tsc et --enable-x86-sep pour
ajuster le comportement.
L’option --enable-x86-sep sert sur les processeurs où la bibliothèque C peut utiliser le mécanisme
SYSENTER/SYSEXIT pour invoquer les appels-système plutôt que le principe des trappes INT 0x80. La
bibliothèque NPTL sera nécessaire pour fournir les points d’entrée dans le noyau.
[xenomai-2.6.0]# make install
Pour tester le bon fonctionnement de Xenomai, quelques outils de mesure sont livrés avec le système.
[xenomai-2.6.0]# cd /usr/xenomai/bin/
[bin]# export LD_LIBRARY_PATH=/usr/xenomai/lib/
[bin]# ./cyclictest
./latency
L’objectif de ce TP est de d’apprendre comment fonctionne Xenomai pour traiter des petites tâches
temps réel sous forme d’exercices.
Latency : est la durée entre l’acquisition d’une (des) donnée(s) et la réponse du système
./latency -p 100 -T 10 :Test de latence de période de 100us pendant 10s :
L’exercice 1 illustre la création et l’exécution d’une tâche affiche() qui permet d’afficher un message
Avant de compiler le programme il faut d’abord installer la package de gcc
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/timer.h>
#include <rtdk.h> // biblio des taches temp reél
RT_TASK affiche_task; // Création d’un objet de class RT_TASK (tâche temps réel)
void affiche (void *arg)
{
RT_TASK *curtask; // Création d’un pointeur sur un objet de type RT_TASK
RT_TASK_INFO curtaskinfo; /* Création d’un objet de type RT_TASK_INFO :pour accès a les
information du l’objet de type tache RT curtask */
printf("Hello RT World!\n");
curtask=rt_task_self(); // affectation du current task a l’objet curtask
rt_task_inquire(curtask,&curtaskinfo); // affectation de l’info de curtask
printf("Task name : %s \n", curtaskinfo.name); // affichage de l’info de curtask
}
int main(int argc, char* argv[])
{
char str[10] ;
rt_print_auto_init(1);
mlockall(MCL_CURRENT|MCL_FUTURE);
printf("start task\n");
sprintf(str,"hello world !");
rt_task_create(&demo_task, str, 0, 50, 0);
rt_task_start(&demo_task, &demo, 0);
}
1. Explication du programme :
Dans ce code , nous allons créer une tâche Xenomai qui affiche un message affiche(). Cela permet tout
de même de valider la chaîne de compilation et le support de Xenomai dans le noyau à travers un
exemple basique.
2. Compilation du programme gcc hello.c
Hello world !
- Ecrire d’un fonction nTache(int n) qui exécute n tache de meme riorité en mode one-shot et chacune
exécute la fonction suivante :
void affiche (void *arg) {
RT_TASK *curtask;
RT_TASK_INFO curtaskinfo;
curtask=rt_task_self();
rt_task_inquire(curtask,&curtaskinfo);
printf("Task name : %s \n", curtaskinfo.name);
}