Vous êtes sur la page 1sur 90

Linux pour le temps-réel

1
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Plan du cours

Les solutions temps-réel « classiques »

Les solutions temps-réel basées sur Linux

La solution RTAI

La programmation sous RTAI

L’outil de traçage LTT

2
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

- VxWorks

- VRTX

- QNX

- pSOS+

- µC/OS II

- OSE

- OSEK-VDX

3
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

VxWorks (1)

- Distribué par Wind River

- Caractéristiques :
- noyau temps-réel multi-tâches
- cibles supportées : Motorola/IBM PowerPC, Motorola 68K/CPU32,
Intel Pentium, Intel StrongArm et ARM, …
- Services :
- ordonnancement à priorités (256 niveaux): préemptif à priorités fixes
- ordonnancement sans priorités : round-robin
- synchronisation (sémaphores, signaux, RPC)
- gestion des ressources partagées: Priority Ceiling Protocol (PCP)
- gestion des interruptions (conforme POSIX), support interruptions imbriquées
- communication (files de messages - BALs, pipes, mémoire partagée, RPC)
- gestion MMU en option, allocation dynamique
4
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

VxWorks (2)

- Outils :

- Plate-forme de développement Tornado :


´ outils de cross-compilation
´ WindView
´ VxSim

- Performances (Pentium 200MHz) :


- Temps de latence moyen : 1.7 µs
- Temps de latence max : 6.8 µs

- Evolutions :
- VxWorks 6.x : architecture modulable permettant à VxWorks de
communiquer avec Linux ainsi qu’avec d’autres technologies.
5
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

VRTX

- Distribué par Mentor Graphics

- Caractéristiques :
- noyau temps-réel multi-tâches
- cibles supportées : PowerPC, ARM, 68K, CPU32, CPU32+, M·CORE, 80x86, …

- Services :
- ordonnancement à priorités (256 niveaux): préemptif à priorités fixes
- ordonnancement sans priorités : round-robin
- synchronisation (sémaphores, événements)
- gestion des ressources partagées: Priority Inheritance Protocol (PIP)
- gestion des interruptions (conforme POSIX), support interruptions imbriquées
- communication (files de messages - BALs, pipes, mémoire partagée)
- gestion MMU, allocation dynamique
6
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

QNX (1)

- Distribué par QNX Software Systems

- Caractéristiques :
- système d’exploitation temps-réel type UNIX, à micro-noyau
- cibles supportées : famille x86, MIPS, PowerPC, SH-4, ARM, StrongARM,
xScale
- Services :
- ordonnancement à priorités (32 niveaux): préemptif à priorités fixes
- ordonnancement sans priorités : round-robin
- synchronisation (sémaphores, signaux, messages)
- gestion des ressources partagées: Priority Inheritance Protocol (PIP)
- gestion des interruptions (conforme POSIX), support interruptions imbriquées
- communication (files de messages - BALs, pipes)
- gestion MMU, allocation dynamique
7
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

QNX (2)

- Outils :

- Interface utilisateur graphique


(QNX Photon microGUI)

- DDK (Driver Development Kits)

- Performances (Pentium 200MHz) :

- Temps de latence moyen : 1.6 µs


- Temps de latence max : 4.1 µs

8
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

pSOS+ (1)

- Distribué par Wind River

- Caractéristiques :
- système d’exploitation temps-réel
- cibles supportées : Motorola/IBM PowerPC, MIPS

- Services :
- ordonnancement à priorités : préemptif à priorités fixes
- ordonnancement sans priorités : round-robin
- synchronisation (sémaphores, événements, messages)
- gestion des ressources partagées: Priority Inheritance Protocol (PIP),
Priority Ceiling Protocol (PCP)
- gestion des interruptions (conforme POSIX), support interruptions imbriquées
- communication (files de messages - BALs, mémoire partagée)
- gestion MMU, allocation dynamique
9
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

pSOS+ (2)

- Outils :

pRISM+ 3 IDE
(Integrated Developement Environment)

- Performances (Pentium 200MHz) :

- Temps de latence moyen : 1.9 µs


- Temps de latence max : 3.8 µs

10
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

µC/OS II

- Distribué par Micriµm

- Caractéristiques :
- noyau temps-réel multi-tâches pour multiprocesseurs et microcontrôleurs
- cibles supportées : x86, ARM, StrongARM, M68x, ColdFire, PowerPC,
MicroBlaze, TMS320-Cxxxxx, …
- Services :
- ordonnancement à priorités : préemptif à priorités fixes
- ordonnancement sans priorités : non supporté
- synchronisation (sémaphores, mutex, événements)
- gestion des ressources partagées: Priority Inheritance Protocol (PIP)
- communication (files de messages – BALs)

11
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

OSE

- Distribué par OSE Systems (filiale d’ENEA)

- Caractéristiques :
- noyau temps-réel multi-tâches
- cibles supportées : Motorola/IBM PowerPC, Motorola 68K/CPU32,
MIPS, Texas Instruments TMS320Cxxx, Intel StrongArm et ARM, …
- Services :
- ordonnancement à priorités (32 niveaux) : préemptif et cyclique
- ordonnancement sans priorités : round-robin
- synchronisation (sémaphores, signaux avec buffers)
- gestion des ressources partagées : aucun protocole
- gestion des interruptions (non-POSIX), support interruptions imbriquées
- communication (signaux avec buffers, mémoire partagée)
- gestion MMU par segments, allocation dynamique par blocs
12
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

OSEK-VDX (1)

- OSEK :

- abréviation de « Offene Systeme und deren Schnittstellen für die


Elektronik im Kraftfahrzeug » (système ouverts et interfaces correspondantes
pour l’électronique des véhicules automobiles)
- créé en 1993 par un consortium de sociétés automobiles allemandes
(BMW, Bosch, DaimlerChrysler, Opel, Siemens et VW) et d’universitaires

- VDX :

- acronyme de « Vehicule Distributed eXecutive »


- créé en 1992 par un consortium de sociétés automobiles françaises
(Renault et PSA)

- OSEK-VDX : fusion des 2 consortium en 1994

13
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

OSEK-VDX (2)

- Caractéristiques :

- standard industriel pour une architecture flexible pour


les unités de contrôle distribuées dans les véhicules

- Services :

- ordonnancement à priorités : préemptif, non préemptif, mixte


- ordonnancement sans priorités : FCFS
- synchronisation (sémaphores, événements)
- gestion des ressources partagées: Priority Ceiling Protocol (PCP)
- gestion des interruptions (non-POSIX), support interruptions imbriquées
- communication (files de messages, mémoire partagée)
- pas de gestion MMU, pas d’allocation dynamique

14
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel « classiques »

OSEK-VDX (3)

- Systèmes d’exploitation temps-réel conformes au standard OSEK/VDX :

- osCAN (Vector Informatik)


- ProOSEK (3Soft)
- Nucleus OSEK (Accelerated Technology)
- RTA-OSEK (LiveDevices)
- OSEKturbo (Metrowerks)
- Eurosmot (Euros)
- OX-OSEK (Trialog)
- OSEKWorks (Wind River)

15
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux

- Les solutions Linux temps-réel propriétaires

- RTLinuxPro - HardHat
- BlueCat RT - RedHawk
- LynxOS

- Les solutions Linux temps-réel libres

- RTAI -TimeSys RT
- RTLinuxFree - Linux/RK
- Klinux - KURT
- REDICE-Linux - QLinux

16
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux

Propriété, commerce et liberté

- Un programme propriétaire ne donne pas accès à son code source

- Conditions pour qu’un programme soit libre :


1) Avoir accès au code source du programme
2) Pouvoir modifier et adapter le programme à ses besoins
3) Pouvoir redistribuer des copies du programme
4) Pouvoir publier le code source modifié

- Libre mais pas obligatoirement gratuit

- Gratuit mais pas forcément libre

- Commercial mais pas forcément propriétaire

- Les licences GPL, LGPL

17
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux

Les solutions Linux temps-réel propriétaires

- RTLinuxPro

- BlueCat RT

- LynxOS

- HardHat

- RedHawk

18
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel propriétaires

RTLinuxPro (1)

- Distribué par FSMLabs

- RTLinuxPro est une extension temps-réel dur du noyau Linux

- Il s’agit d’un patch pour les noyaux Linux standards (type « vanilla »)
- RTLinuxPro considère Linux comme une tâche de fond s’exécutant lorsque
aucune activité temps-réel n’est présente.

19
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel propriétaires

RTLinuxPro (2)

- Temps-réel dur avec un déterminisme de l’ordre de la microseconde

- Le noyau RTLinuxPro supporte les noyaux Linux 2.4 et 2.6

- cibles supportées : famille x86, Motorola/IBM PowerPC, Xscale,


MIPS, Alpha, Intel StrongArm et ARM

- Pas de protection mémoire ni d’allocation dynamique dans le noyau

- Synchronisation et communication : sémaphores, mutex, contrôle de


l’inversion de priorité, mémoire partagée, FIFOs

- Résolution d’horloge : la nanoseconde

- Son code source est sous licence propriétaire


20
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel propriétaires

BlueCat RT

- Distribué par LynuxWorks

- BlueCat RT est une solution hybride


entre le noyau temps-réel RTLinuxPro
et le noyau embarqué BlueCat

- Système temps-réel dur stable et flexible

- API conforme au standard POSIX

- Son code source est sous licence


propriétaire

21
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel propriétaires

LynxOS

- Distribué par LynuxWorks

- LynxOS est un système d’exploitation temps-réel propriétaire type UNIX

- Il a été développé avec des objectifs de haute performance et des réponses


temps-réel dur déterministes

- LynxOS est conforme à la norme POSIX 1003.1

- Cibles supportées : Motorola 68K, famille x86, ARM, PowerPC, …

- 2003 : sortie de LynxOS-178 certifié DO-178B pour les applications avioniques

- Son code source est sous licence propriétaire

22
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel propriétaires

HardHat Linux

- Distribué par Montavista

- Temps-réel mou

- Améliorations apportées à Montavista Linux : noyau Linux préemptible,


ordonnanceur temps-réel, timers haute résolution et conformes POSIX

- cibles supportées : x86/IA-


32, PowerPC, StrongARM,
Xscale, MIPS, SH, ARM

- Seul le code source de


l’ordonnanceur temps-réel
est sous licence GPL

23
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel propriétaires

RedHawk

- Distribué par Concurrent Computer Corporation

-OS temps-réel pour les systèmes multiprocesseurs à base de Xeon (AMD)


ou d’Opteron (Intel)

- RedHawk est conforme aux standards industriels (Linux Standard Base,


POSIX 1003.1, POSIX 1003.1b)

- Il supporte un panel d’outils de


développement (NightStar GUI) :
NightView, NightTrace, NigthSim,
NightProbe

- Son code source est sous


licence propriétaire

24
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux

Les solutions Linux temps-réel libres

- RTAI

- RTLinuxFree

- Klinux

- REDICE-Linux

- TimeSys RT

- Linux/RK

- KURT

- QLinux

25
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

RTAI

- RTAI est intégré à Linux grâce à un patch noyau et une série de programmes
additionnels (modules chargeables dynamiquement) qui étendent le noyau
Linux au temps-réel dur

- Projet initié et maintenu par le Département de l’Ingénierie Aérospatiale de


l’Ecole Polytechnique de Milan (DIAPM)

- Différentes implémentations :
- RTAI 24.1.x : RTAI/RTHAL (Real-Time Hardware Abstraction Layer)
- RTAI 3.x : RTAI/ADEOS (Adaptive Domain Environment for Operating Systems)

- Cibles supportées : x86, PowerPC, ARM, StrongARM, MIPS, CRIS

- Son code source est sous licence LGPL


26
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

RTLinuxFree

- RTLinux est une extension temps-réel dur du noyau Linux

- RTLinuxFree est un patch pour les noyaux Linux standards (type « vanilla »)

- Développement stoppé par FSMLabs depuis 2001

- RTLinuxFree 3.1 (dernière version) : noyau Linux 2.4 uniquement

- Cibles supportées : x86, Legacy ARM, SH

- Son code source est régi par 2 licences :


- la licence GPL vers. 2
- la RTLinux Open Patent License (droit d'utilisation du brevet
américain n°5995745 dans des logiciels libres couverts par la GPL)
27
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

KLinux

- Distribué par Koan Software Engineering

- Klinux est actuellement basé sur le noyau Linux 2.6.12

- cibles supportées : famille x86, ARM (StrongArm, XScale, AT91),


SH, MIPS et VRx

- Klinux offre du temps-réel dur


en intégrant un support RTAI

- Klinux se décline en plusieurs


versions payantes (à partir de 299€)

- Son code source est sous


licence GPL

28
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

REDICE-Linux

- Distribué par REDSonic

- Temps-réel dur

- Ajouts de fonctionnalités au noyau Linux : insertion de points de préemption,


timer haute résolution, ordonnanceurs temps-réel (RM, EDF)

- REDICE-Linux est basé sur les noyaux Linux 2.2.x et 2.4.x

- Cibles supportées : x86, PowerPC, ARM, MIPS, StrongARM

29
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

TimeSys Linux/RT

- Distribué par TimeSys

- TimeSys Linux/RT est une distribution destinée aux applications temps-réel


critiques qui rend le noyau standard de Linux préemptible

- Version actuelle basée sur le


noyau Linux 2.4.21

- cibles supportées : x86/IA-32,


PowerPC, StrongARM, Xscale,
MIPS, SH, ARM, UltraSparc

- Son code source est sous


licence GPL

30
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

Linux/RK

- Linux/Resource Kernel est une extension temps-réel sous forme de modules


chargeables dynamiquement dans le noyau

- Support de gestion des ressources partagées

- Linux/RK est développé par le laboratoire « Real-time and Multimedia Systems »


dirigé par le professeur Raj Rajkumar de l’université de Carnegie Mellon

31
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

KURT

- Kansas University Real-Time

- Patch pour Linux offrant un ordonnancement temps-réel précis à la


microseconde

- KURT fournit trois modes système :


- le mode normal dans lequel le système fonctionne en temps partagé

- le mode focalisé dans lequel seuls les processus temps réel sont
autorisés à s’exécuter

- le mode mixte dans lequel tous les processus sont autorisés à


s’exécuter et où les processus non temps réel sont servis seulement
lorsque l’ordonnancement temps réel l’autorise

- Son code source est sous licence GPL


32
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
Les solutions temps-réel basées sur Linux
Ê Les solutions Linux temps-réel libres

QLinux

- Qlinux est un noyau Linux orienté applications multimédias

- Il offre des garanties de Qualité de Service (QoS)

- Patch pour Linux offrant les ordonnanceurs suivants :

- un ordonnanceur H-SFQ
(Hierarchical Start Time Fair Queuing) CPU

- un ordonnanceur de paquets de réseau H-SFQ


(Hierarchical Start Time Fair Queuing)

- Version actuelle basée sur le noyau Linux 2.4.4

- Son code source est sous licence GPL


33
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI

- Présentation

- Origine et historique

- La couche RTHAL

- L’environnement ADEOS

- La modularité du système RTAI

- Les types d’ordonnancement supportés

34
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê Présentation

Présentation

- RTAI (Real-Time Application Interface) présente les spécifications d’un OS


temps-réel industriel
- Caractéristiques :
- extension temps-réel dur du noyau Linux
- cibles supportées : x86, PowerPC, ARM, StrongARM, MIPS, CRIS
- Services :
- ordonnancement à priorités (230 niveaux): fixes (RM), dynamiques (EDF)
- ordonnancement sans priorités : round-robin, FCFS
- synchronisation (sémaphores, mutex)
- gestion des ressources partagées: PIP, PCP
- gestion des interruptions (non-POSIX), pas de support interruptions imbriquées
- communication (FIFOs, files de messages - BALs, mémoire partagée, RPC)
- pas de gestion MMU, allocation dynamique
35
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê Origine et historique

Origine et historique

- Concept d’une couche d’abstraction matérielle temps-réel née en 1996 à


Milan au sein d’une équipe du DIAPM dirigée par Paolo Mantegazza

- Couche RTHAL (Real-Time


Hardware Abstraction Layer)
implantée en 1998

- Problème du brevet de
licence défini pour RTLinux
par FSMLabs en 2001

- Environnement ADEOS
(Adaptive Domain
Environment for Operating
Systems) depuis 2003 et
support exclusif des
dernières versions
36
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê La couche RTHAL

Architecture de la couche RTHAL

37
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê La couche RTHAL

Implémentation de RTAI sur la couche RTHAL

38
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê La couche RTHAL

Structure de pointeurs de la couche RTHAL

39
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê La couche RTHAL

Intérêts et inconvénients du concept RTHAL

- Intérêts :

- Les changements apportés au noyau Linux standard sont minimaux :


- faible intrusion
- amélioration de la maintenance du code
- rapide adaptation aux nouvelles versions du noyau Linux

- Les extensions temps-réel peuvent aisément être supprimées en reroutant


les pointeurs des fonctions d’interruption vers les routines Linux d’origine.

- Inconvénients :

- Le noyau Linux souffre un peu de pertes de performances du fait des


détournements à travers les pointeurs, vers les fonctions de masquage et
démasquage des interruptions.
40
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê L’environnement ADEOS

Architecture de l’environnement ADEOS

41
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê L’environnement ADEOS

Implémentation de RTAI dans l’environnement ADEOS

42
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê L’environnement ADEOS

Interface RTAI-ADEOS : la couche ARTI

- La couche RTHAL a été totalement réécrite Æ couche ARTI

- 34 fichiers source sur 750 ont été modifiés

- Dans les fichiers de l’API, moins de 100 lignes ont été changées (sur ≅150 000)
- L’API n’a pas été modifiée

- RTHAL (Dual PIII 750MHz) :


- temps de latence max (kernel) : 14 µs
- temps de latence max (user) : 30 µs
- temps de max de chgt de contexte : 1.2 µs
- ARTI (Dual PIII 750MHz) :
- temps de latence max (kernel) : 20 µs
- temps de latence max (user) : 42 µs
- temps de max de chgt de contexte : 1.3 µs

43
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê L’environnement ADEOS

Intérêts et inconvénients de l’environnement ADEOS

- Intérêts :

- Possibilité de faire co-exister plusieurs OS (domaines) sur le même matériel

- aucun de ces domaines ne connaît nécessairement l’existence des autres


- tous ces domaines connaissent l’existence d’ADEOS

- Faible intrusion

- Inconvénients :

- Le partage des interruptions entre les différents domaines via le pipeline


réduit légèrement la performance globale (reroutage des interruptions)

44
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê La modularité du système RTAI

Les différents modules de RTAI

- Liste des modules chargeables dynamiquement dans le noyau :

- rtai.o :
- rtai_sched.o :
- rtai_fifos.o :
- rtai_shm.o :
- rtai_lxrt.o :
- rt_com.o :
- rtai_libm.o :
- rtai_mem_mgr.o :
- rtai_watchdog.o :
- rtai_trace.o :
- tracer :
45
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê Les types d’ordonnancement supportés

Types d’ordonnanceurs sous RTAI

- UP – Uni-Processor :
- environnements monoprocesseur exclusivement
- basé sur le chip 8254
- ordonnancement one-shot ou périodique

- SMP – Symetrical Multi-Processor :


- environnements multiprocesseurs
- basé sur le chip 8254 ou bien sur un timer local APIC
- ordonnancement single one-shot ou périodique
- les tâches peuvent s’exécuter de façon symétrique sur un ou
plusieurs clusters de CPUs ou se confiner sur un seul CPU
- MUP – Multi Uni-Processor :
- environnements multiprocesseurs exclusivement
- basé sur timer local APIC (ordonnancement hétérogène possible)
- une tâche doit être confinée à un seul CPU
46
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La solution RTAI
Ê Les types d’ordonnancement supportés

L’ordonnanceur monoprocesseur

- Politiques d’ordonnancement :

- RT_SCHED_FIFO : FIFO (politique par défaut sous Linux)

- RT_SCHED_RR : Round Robin

- RMS : Rate Monotonic Scheduling (politique par défaut sous RTAI)

- EDF : Earliest Deadline First scheduling

Note: informations détaillées dans le fichier Documentation/README.SCHED_POLICY

47
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI

- Organisation structurelle d’un programme

- Programmation de tâches temps-réel

- Mécanismes natifs à RTAI

- Fonctions avancées

- Compilation et lancement une application RTAI

48
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Squelette d’un programme sous RTAI

- Inclusions de librairies

- Définitions générales

- Déclarations des identificateurs de tâches

- Code des fonctions des différentes tâches

- Fonction de lancement du processus temps réel

- Fonction d’arrêt du processus temps réel

49
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Inclusions de librairies

#include <linux/module.h>
Librairies Linux
#include <asm/io.h>

#include <rtai.h>
#include <rtai_fifos.h> Librairies RTAI
#include <rtai_sched.h>
. . .

50
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Définitions générales

#define RT_STACK_SIZE 2000


#define RT_PRIORITY 0 Caractéristiques
#define NO_FPU 0 des tâches temps-réel
#define FPU 1

#define TIMERTICKS 500000 Caractéristiques


#define ONE_SHOT de l’ordonnancement
. . .

51
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Déclaration des identificateurs de tâches

static RT_TASK tidHorloge


static RT_TASK tidCapteur
static RT_TASK tidActionneur
static RT_TASK tidControle
static RT_TASK tidCommande
. . .

52
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Code des fonctions des différentes tâches

static void CodeCapteur(int t)


{
float erreur;
while(1)
{
if (erreur>2.50)
outb(REG_CANAL,BASEPORT);
. . .
}
}

53
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Fonction de lancement du processus temps-réel

int init_module(void)
{
rt_task_init(&tidHorloge, CodeHorloge, 0,
RT_STACK_SIZE, RT_PRIORITY, NO_FPU, 0);
. . .
rt_task_resume(&tidHorloge);
. . .
return 0
}

54
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Organisation structurelle d’un programme

Fonction d’arrêt du processus temps-réel

void cleanup_module(void)
{
rt_task_delete(&tidHorloge);
rt_task_delete(&tidControle);
rt_task_delete(&tidCommande);
rt_task_delete(&tidCapteur);
. . .
}

55
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Programmation de tâches temps-réel

La priorité des tâches

- RT_HIGHEST_PRIORITY = WATCHDOG_PRIORITY

- RT_LOWEST_PRIORITY

- RT_LINUX_PRIORITY

- Fonctions de gestion des priorités :

- rt_change_prio : change la priorité initiale de la tâche temps-réel

- rt_get_prio : retourne la priorité initiale de la tâche temps-réel

- rt_get_inher_prio : retourne la priorité de la tâche temps-réel héritée

d’autres tâches bloquées sur une ressource possédée par cette tâche

56
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Programmation de tâches temps-réel

Programmation des tâches périodiques (1)

- Fonctions de gestion des tâches périodiques :

- rt_task_init : crée et initialise une nouvelle tâche temps-réel

- rt_task_make_periodic : rend une tâche périodique

- rt_task_wait_period : rend la main jusqu’à la période suivante

- rt_task_delete : détruit une tâche temps-réel

57
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Programmation de tâches temps-réel

Programmation des tâches périodiques (2)

- Fonctions de démarrage d’une tâche périodique :


int rt_task_init ( RT_TASK *task,
void (*rt_thread) (int),
int data,

X int stack_size,
int priority,
int uses_fpu,
void (*signal) (void) );

int rt_task_make_periodic ( RT_TASK *task,

RTIME start_time,
Y
RTIME period );
58
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Programmation de tâches temps-réel

Programmation des tâches apériodiques (1)

- Fonctions de gestion des tâches apériodiques :

- rt_task_init : crée et initialise une nouvelle tâche temps réel

- rt_task_suspend : suspend une tâche temps réel

- rt_task_yield : cède la main à l’ordonnanceur

- rt_task_resume : réveille une tâche temps réel

- rt_task_delete : détruit une tâche temps réel

59
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Programmation de tâches temps-réel

Programmation des tâches apériodiques (2)

- Fonctions de démarrage d’une tâche apériodique :

int rt_task_init ( RT_TASK *task,


void (*rt_thread) (int),
int data,

X int stack_size,
int priority,
int uses_fpu,
void (*signal) (void) );

Y int rt_task_resume (RT_TASK *task);

60
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Programmation de tâches temps-réel

La gestion du timer

- Démarrage et arrêt du timer :


- start_rt_timer() : démarre le timer

- stop_rt_timer() : stoppe le timer

- Définition du mode d’ordonnancement :


- rt_set_oneshot_mode() : sélectionne le mode « one-shot »

- rt_set_periodic_mode() : sélectionne le mode « périodique » (par défaut)

- Autres fonctions :
- rt_get_time(), rt_get_time_ns() : renvoient le temps courant

- rt_sleep() : endort la tâche pendant un temps t (attente passive)

- rt_busy_sleep() : endort la tâche pendant un temps t (attente active)


61
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

Mécanismes natifs à RTAI

- Les sémaphores

- Les boîtes aux lettres (BALs)

- Les FIFOs temps-réel

- La mémoire partagée

62
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

Les sémaphores

- Fonctions de gestion des sémaphores :

- rt_sem_init : initialise un sémaphore compteur

- rt_sem_delete : détruit un sémaphore

- rt_sem_signal : envoie un sémaphore

- rt_sem_wait : attend un sémaphore

- rt_sem_wait_if : la tâche appelée ne doit pas être bloquée

- rt_sem_wait_until, rt_sem_wait_timed : versions temporisées

63
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

Les boîtes aux lettres (BALs)

- Fonctions de gestion des BALs :

- rt_mbx_init : initialise une boîte aux lettres

- rt_mbx_delete : détruit une boîte aux lettres

{ - rt_mbx_send : envoie un message sans conditions (bloquant)

- rt_mbx_receive : reçoit un message sans conditions

- rt_mbx_send_wp, rt_mbx_receive_wp

- rt_mbx_send_if, rt_mbx_receive_if

- rt_mbx_send_until/timed, rt_mbx_receive_until/timed

64
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

Les FIFOs temps-réel (1)

- Seul moyen de communication sûr entre Linux et RTAI

- Fonctions de gestion des FIFOs :

- rtf_create : crée une FIFO temps réel

- rtf_destroy : ferme une FIFO temps réel

- rtf_put : écrit des données dans une FIFO temps réel


- rtf_get : lit des données dans une FIFO temps réel

- rtf_resize : redéfinit la taille d’une FIFO temps réel


- rtf_create_handler : installe un pointeur sur une fonction qui sera

exécutée lors de l’accès à la FIFO temps réel (lecture/écriture)


65
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

Les FIFOs temps-réel (2)

- Fonctions auxiliaires :

- Des versions de ‘printk’ sécurisées pour le temps réel :

- rt_printk : écrit une donnée dans un tampon Linux lisible

par la commande ‘dmesg’

- rtai_print_to_screen : affiche une donnée à l’écran en

mode console

66
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

La mémoire partagée (1)

- Mécanisme plus complexe à utiliser que les FIFOs

- Exclusion mutuelle entre Linux et les tâches RTAI non garantie

- 2 implantations différentes :

- shmem : version propre à RTAI, développée par Paolo Mantegazza

- mbuff : version développée par Tomasz Motlewski (version


indépendante de RTAI)

67
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Mécanismes natifs à RTAI

La mémoire partagée (2)

- Utilisation dans l’espace utilisateur (user space) :

- adr = rtai_malloc(name, size);

- adr = rtai_malloc_adr(start_address, name, size);

- rtai_free(name, adr);

- Utilisation dans l’espace noyau (kernel space) :

- adr = rtai_kmalloc(name, size);

- rtai_kfree(name);

68
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Fonctions avancées

Fonctions avancées

- La gestion des interruptions

- La gestion du port série

- Le module LXRT

- Les extensions POSIX

69
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Fonctions avancées

La gestion des interruptions

- rt_enable_irq : autorise la prise en compte d’une interruption

- rt_disable_irq : interdit la prise en compte d’une interruption

- rt_request_global_irq : associe une routine à une interruption

- rt_free_global_irq : libère la routine de l’interruption qui lui était associée

- rt_pend_linux_irq : redirige une interruption vers Linux

70
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Fonctions avancées

La gestion du port série

- Initialisation du port série :


rt_com_set_param (unsigned int com,
int address,
int irq);

- Initialisation de la communication :
rt_com_setup (unsigned int com,
unsigned baud,
unsigned parity,
unsigned stopbits,
unsigned wordlength);

- Ecriture de données sur le port série :


rt_com_write (unsigned int com, char *buf, int cnt);

- Lecture de données sur le port série :


rt_com_read (unsigned int com, char *buf, int cnt);
71
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Fonctions avancées

Le module LXRT

- LXRT (LinuX Real-Time) permet aux processus Linux d’utiliser l’API RTAI

- Possibilité de développer des tâches temps-réel comme des processus


(et non des modules noyau)

- Les tâches temps réel LXRT s’exécutent


depuis l’espace utilisateur

- Ces tâches bénéficient des mécanismes


de protection mémoire de Linux

- Les utilisateurs NON root peuvent créer des tâches temps-réel


72
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Fonctions avancées

Les extensions POSIX

Fonctionnalités
implémentées
sous RTAI

73
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Compilation et lancement d’une application RTAI

- Les Makefiles : généralités

- Compilation d’une application RTAI

- Lancement d’une application RTAI

- Arrêt d’une application RTAI

74
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Les Makefiles : généralités (1)

- Une règle de compilation lie un fichier source, un fichier cible et une


méthode compilation. Cette liaison s’écrit de la manière suivante :

FichierCible : FichierSource1 FichierSource2 …


(TABULATION) gcc [paramètres] –o $@ $<

- Définition d’une règle globale :

all : FichierCible1 FichierCible2 …

- Définition d’une règle clean :


clean :
(TABULATION) rm –f *.o

75
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Les Makefiles : généralités (2)

- L’utilisation de variables :

- Une déclaration de variable se fait par une ligne du type :

NomVariable = ValeurVariable

- L’accès à la valeur d’une variable s’effectue comme suit :

$(NomVariable)

- L’inclusion de fichiers :

- Ceci permet de partager des variables à plusieurs Makefiles :

include NomFichier

76
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Compilation d’une application RTAI (1)

- Définition des règles de compilation :

Fichier rules.make :

INCLUDE = -I/usr/src/rtai/include -I/usr/src/linux/include

PARAM = -O2 -c

DEFINE = -DMODULE -D__KERNEL__ -DCONFIG_DYN_MM -DCPU=686

Note: on se place dans le cas d’une application non-LXRT sur un CPU 686

77
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Compilation d’une application RTAI (2)

- Définition des fichiers à compiler :

Fichier Makefile :

include ./rules.make
all: NomFichierCible1.o NomFichierCible2.o
NomFichierCible1.o : NomFichierSource1 NomFichierSource2 …
gcc $(PARAM) $(INCLUDE) $(DEFINE) -o $@ $<
NomFichierCible2.o : NomFichierSource1 NomFichierSource2 …
gcc $(PARAM) $(INCLUDE) $(DEFINE) -o $@ $<
clean :
rm -f *.o

78
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Lancement d’une application RTAI

- Définition d’un script de lancement :


Fichier run :
#!/bin/sh

sync

insmod /usr/src/rtai/modules/rtai_trace.o
insmod /usr/src/rtai/modules/rtai.o
insmod /usr/src/rtai/modules/rtai_fifos.o
Insmod /usr/src/rtai/modules/rt_mem_mgr.o
insmod /usr/src/rtai/modules/rtai_sched.o
insmod tracer

trace 5 file

insmod monAppli.o

79
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
La programmation sous RTAI
Ê Compilation et lancement d’une application RTAI

Arrêt d’une application RTAI

- Définition d’un script d’arrêt :

Fichier rem :
rmmod monAppli
rmmod tracer
rmmod rtai_sched
rmmod rt_mem_mgr
rmmod rtai_fifos
rmmod rtai
rmmod rtai_trace

80
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT

- Expression du besoin

- Présentation de l’outil

- Intégration avec RTAI

- Analyse des données

- Utilisation de l’outil

81
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Expression du besoin

Comprendre le comportement d’un système temps-réel

- 3 niveaux de détails sont nécessaires pour comprendre le comportement


et les dynamiques associées à un système temps-réel embarqué :

- le niveau matériel
- le niveau système
- le niveau application

- L’outil de visualisation doit pouvoir :

- décrire la séquence des événements clés qui se


sont produits sur une période précise du temps
- présenter des statistiques relatives au système

82
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Présentation de l’outil

LTT (Linux Trace Toolkit)

- LTT est un outil de visualisation développée par la société Opersys

- LTT permet d’effectuer des mesures de performances temporelles


(pourcentage de temps CPU, durée d’exécution, etc.)

- Les événements capturés par LTT peuvent être des changements de


contexte, des interruptions matérielles ou logicielles ou bien des
accès disques.

- LTT réalise une trace en-ligne et une reconstruction hors-ligne du


comportement dynamique du noyau Linux/RTAI.

- Son code source est sous licence GPL


83
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Présentation de l’outil

L’interface graphique

84
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Intégration avec RTAI

Architecture combinée à RTAI

85
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Analyse des données

Traçage des événements RTAI

86
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Analyse des données

Analyse détaillée des données (1)

87
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Analyse des données

Analyse détaillée des données (2)

88
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
L’outil de traçage LTT
Ê Utilisation de l’outil

Utilisation de LTT

- Capture d’une trace :

- utilisation du script trace :

#/!bin/sh
TraceDaemon/TraceDaemon –ts$1 /dev/tracer $2.trace $2.proc

- Lecture d’une trace :

- utilisation du script traceview :

#/!bin/sh
TraceToolkit/TraceToolkit –g /dev/tracer $1.trace $1.proc &

89
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006
TD / TP

Mise en œuvre d’une application sous Linux/RTAI :

Mesure en temps-réel de la vitesse de frappe au clavier

90
Module E4 : Systèmes temps-réel Audrey Marchand 2005-2006

Vous aimerez peut-être aussi