20

installation de Xenomai

  • Upload
    yacine

  • View
    73

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 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

Page 2: installation de Xenomai
Page 3: installation de Xenomai

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.

Page 4: installation de 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

Page 5: installation de Xenomai

linux-2.6.38.8-xenomai]# make menuconfig

Page 6: installation de Xenomai

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

Page 7: installation de Xenomai

Power managment and ACPI options -->

ACPI Support -->

o < > Processor

Power managment and ACPI options -->

< > APM

Page 8: installation de Xenomai

Power managment and ACPI options -->

CPU frequency scaling -->

o [ ] CPU frequency scaling

Power managment and ACPI options -->

[ ] Cpuidle Driver for Intel Processors

Page 9: installation de Xenomai

Processor type and features -->

Preemption Model -->

o (X) Preemptible Kernel (Low-Latency Desktop)

Page 10: installation de Xenomai

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

Page 11: installation de Xenomai

Compilation du kernel make-kpkg --append-to-version -xenomai --initrd buildpackage

Page 12: installation de Xenomai

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

Page 13: installation de Xenomai
Page 14: installation de Xenomai

Une fois le système démarré, nous pouvons vérifier que tout va bien :

Page 15: installation de Xenomai

[~]# 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.

Page 16: installation de Xenomai

[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

Page 17: installation de Xenomai

./latency

Page 18: installation de Xenomai

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

Page 19: installation de Xenomai

#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);

}