TP Xenomai.pdf
Transcript of TP Xenomai.pdf
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 1/19
: TP 1&2
Année Universitaire : 2012 – 2013
Realisé par
nc dr nt
: Pr . I. LAGRAT
Installation de
Xenomai 2 6 0 sur Ubuntu
LAGDEM Abed
JAMEA Oussama
LAHLAOI Mohamed
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 2/19
2
TP1:
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 3/19
3
la procédure de l’installation de Xenomai
La premiére etape est télécharger Xenomai et Linux noyau
Ou :on peut utiliser ces commandes pour les télécharger :
(root) # wget http://download.gna.org/xenomai/stable/xenomai-2.6.0.tar.bz2 (root) # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 4/19
4
Préparation des sources de Linux
Les sources de Xenomai 2.6.0 et de Linux 2.6.38.8 sont téléchargées dans le repertoire :
/home/lagdem/Downloads/
Nous disposons donc des répertoires
/usr/src/xenomai-2.6.0 : contenant entre autres les sources des bibliothèques deXenomai (que nous compilerons en second lieu);
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 5/19
5
/usr/src/linux-2.6.38.8-xenomai : les sources du noyau Linux modifié par le patch
Adeos/Xenomai.
Compilation du noyau
Nous parons de la configuration du noyau Linux 2.6.38 telle qu’elle était fournie avecUbuntu, puis nous la modifierons pour ajuster certains paramètres à Xenomai.
Ici on a pas le fichier config-2.6.38-11-generic donc on tape les commandes pour le
telecharger : root # cd /boot
root # wget http://www.blaess.fr/christophe/files/article-2011-12-28/config-
2.6.38-11-generic
Et on copie ce fichier par : root # cp /boot/config-2.6.38-11-generic ./.config
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 6/19
6
Dans le menu de configuration, il faut réaliser quelques modifications, aprés
téléchargement et instalation du ncurces comme indiqué ci dessus
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 7/19
7
téléchargement et instalation du ncurces
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 8/19
8
Et voila le menu de configuration, il faut réaliser quelques modifications.
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.
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 9/19
9
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 10/19
10
Enfin on enregistrer les modifications quand on a effectuer :
Le fichier .config étant préparé, nous pouvons démarrer la compilation en utilisant la
méthode Debian / Ubuntu, en ajoutant l’option CONCURRENCY_LEVEL=5 avant make-
kpkg, lancer plusieurs tâches de compilation en parallèle.
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 11/19
11
La compilation crée dans le répertoire /usr/src les packages .deb correspondant au
nouveau kernel. Installons-les.
Et redémarrons sur le nouveau noyau.
[src]# /sbin/rebootAu moment du redémarrage, il est nécessaire de choisir dans le menu de Grub
« Previous Linux versions » puis « Ubuntu, avec Linux 2.6.38.8-xenomai «
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 12/19
12
nous pouvons vérifier que tout va bien :
ompilation des bibliothèques de Xenomai
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 13/19
13
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 14/19
14
Tests
Pour tester le bon fonctionnement de Xenomai, quelques outils de mesure sont livrés avecle système.
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 15/19
15
TP2 :Les Bases de la Real-Time L inux
Objectifs
Ce qui suit sont les principaux objectifs de cet exercice:
- Pour apprendre comment Xenomai fonctionne et de construire une tâche temps réelXenomai.
Comment fonctionne RT Linux travail?
L'idée générale de la RT Linux, c'est que d'un petit noyau temps réel, s’exécute sous Linux,ce qui signifie que le noyau en temps réel a une priorité plus élevée que le noyau Linux. En
temps réel les tâches sont exécutées par le noyau temps-réel, et celle de Linux normales
sont autorisées à s'exécuter quand les tâches temps réel ne sont pas exécutés. Linux peut
être considéré comme la tâche d'inactivité de l'ordonnanceur temps réel. Comme le noyau
temps réel a une priorité plus élevée, un processus normal de Linux est préempté quand une
tâche temps réel devient prêt à fonctionner et la tâche temps réel est exécutéimmédiatement.
Création d'une tâche
Lorsque vous créez une tâche temps réel Xenomai, la structure RT_TASK est utilisé
comme descripteur de référer pour cette tâche.
Une structure de données RT_TASK est utilisé pour contenir toutes les informationssur une tâche:
o la fonction à exécuter par la tâche temps réel,
o argument,
o la taille de la pile alloué pour ses variables,
o sa priorité,
o si elle utilise des calculs en virgule flottante,
o et un «gestionnaire de signal" qui sera appelée lorsque la tâche devient actif.
La tâche est créée en appelant
int rt_task_create (RT_TASK *task, const char *name, int stack_size,int priority, int mode)
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 16/19
16
Bonjour tout le monde
Le code C « ex01.c » illustre la création et le début d'une tâche demo qui écrit un message.
#include <stdio.h> #include <signal.h>
#include <unistd.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/timer.h>
#include <rtdk.h>
RT_TASK demo_task;
void demo(void arg)
RT_TASK curtask;
RT_TASK_INFO curtaskinfo; // hello world
rt_printf("Hello World!\n");
// inquire current task
curtask=rt_task_self();
rt_task_inquire(curtask,&curtaskinfo);
// print task name
rt_printf("Task name : %s \n", curtaskinfo.name);
-
int main(int argc, char argv*+)
char str*10+ ;
// Perform auto-init of rt_print buffers if the task doesn't do so
rt_print_auto_init(1);
// Lock memory : avoid memory swapping for this program
mlockall(MCL_CURRENT|MCL_FUTURE);
rt_printf("start task\n");
/
Arguments: &task,
name,
stack size (0=default),
priority,
mode (FPU, start suspended, ...)
/
sprintf(str,"hello");
rt_task_create(&demo_task, str, 0, 50, 0);
/
Arguments: &task,
task function,
function argument
/
rt_task_start(&demo_task, &demo, 0);
-
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 17/19
17
Pour créer le programme ci-dessus, on tape la commande : gedit ex01.c
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 18/19
18
La bibliothèque rdtk impression temps réel
Notez que dans le code ci-dessus, nous avons utilisé rt_ printf () au lieu de la commande printf (). Nous n'avons pas
utilisé printf (), car il utilise les appels système Linux et par conséquent ralentit terriblement le thread temps réel.
Au lieu de cela, nous utilisons rt_printf à partir de la bibliothèque impression temps réel rdtk. elle est intégrée dans
la partie espace utilisateur Xenomai, mais elle ne dépend pas des services Xenomai. Elle utilise uniquement l’API
POSIX. Le librtprint API ressemble beaucoup à printf:
rt_vfprintf
rt_vprintf
rt_fprintf
rt_printf
Pour démarrer le thread de sortie non-RT il faut appeler le code suivant au début d'un programme Xenomai:
rt_print_auto_ init (1);
Cette auto-init initialise le buffer de rt_print et de démarrer le thread de sortie non-RT.
Compiler un programme de Xenomai
Pour compiler le programme ci-dessus, il faut d'abord obtenir les CFLAGS et LDFLAGS en exécutant
> xeno-config --xeno-cflags
et > xeno-config --xeno-ldflags
Pour définir ces flags, utilisez
> export CFLAGS=`xeno-config --xeno-cflags`
et > export LDFLAGS=`xeno-config --xeno-ldflags`
Enfin, compiler le programme ex01.c avec la bibliothèque native implémentant l’API Xenomai et la
bibliothèque 'rtdk' print library
> gcc $CFLAGS $LDFLAGS -lnative -lrtdk ex01.c -o ex01
Par défaut 'ex01' est lié avec les bibliothèques dynamiques dans /usr/xenomai/lib. Nous devons d'abord
indiquer à Linux où les trouver à l’aide de la variable d'environnement LD_LIBRARY_PATH :
> export LD_LIBRARY_PATH=/usr/xenomai/lib
Puis exécuter le programme:
>. / Ex01
7/21/2019 TP Xenomai.pdf
http://slidepdf.com/reader/full/tp-xenomaipdf 19/19