Premiers pas avec Xenomai

Date de publication : 12/02/2012.

Par David Chabal

 

Xenomai est une solution « temps réel dur » libre adossée à Linux.
Comme il n'est pas forcément aisé de comprendre directement la pertinence des solutions apportées par Xenomai, ce tutoriel décrit les limitations de Linux dans le cadre d'applications temps réel contraintes et introduit progressivement Xenomai.
Ce document décrit, entre autres, l'installation et la configuration des noyaux Linux et Xenomai, le mécanisme de co-scheduling, ainsi que quelques exemples de réalisations.
Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites      


Licence
I. Licence
Introduction
II. Introduction
II-A. Que contient ce document ?
II-B. À qui s'adresse ce tutoriel ? Quels sont les prérequis ?
II-C. Comment est organisé ce document ?
II-D. Quelles sont les limites de ce document ?
Quelques (petits) rappels
III. Quelques (petits) rappels
III-A. Terminologie
III-B. Les processus et les threads
III-C. La latence
III-D. La préemption
III-E. Les modes user et kernel
III-F. L'accumulation des latences dans la gestion d'une interruption matérielle
III-G. Le noyau Linux et ses évolutions
III-H. Les mécanismes de synchronisation
III-I. Comment gérer la priorité des processus ?
III-J. Comment gérer le temps ?
III-J-1. Le modèle « tout périodique »
III-J-2. Le modèle tickless
III-K. Inversion et héritage de priorité
Linux et le(s) temps réel
IV. Linux et le(s) temps réel
IV-A. Les avantages et les inconvénients de Linux pour les applications temps réel
IV-B. Comment faire du temps réel avec Linux : les approches possibles
IV-B-1. Aucune préemption forcée
IV-B-2. Une première possibilité : l'option Voluntary Kernel Preemption
IV-B-3. Pour du temps réel « mou » : Preemptible Kernel (Low-Latency Desktop)
IV-B-4. Le temps réel avec le patch PREEMPT_RT
IV-B-4-a. Drivers
IV-B-4-b. Limitations actuelles et évolutions
IV-B-5. Le temps réel dur avec les co-noyaux
Qu'est-ce que Xenomai ?
V. Qu'est-ce que Xenomai ?
V-A. Origines
V-B. Xenomai, comment ça marche ?
V-B-1. Le routage des interruptions avec ADEOS
V-B-2. Coexistence Xenomai/Linux et partage des ressources : le co-scheduling
V-B-3. La gestion des priorités dans les modes primary et secondary
V-B-4. ADEOS ou comment modifier Linux proprement
V-B-5. Interrupt shield : sus aux interruptions !
V-C. Les architectures supportées
V-D. Les modes d'exécution
V-E. L'API native et les skins
V-F. Solutions concurrentes du marché
Installation et configuration
VI. Installation et configuration
VI-A. Configuration utilisée pour la rédaction de ce document
VI-B. Récupération des sources
VI-C. Procédure d'installation, patch des sources du noyau
VI-D. Configuration de Xenomai dans le noyau Linux
VI-D-1. Lancement de l'utilitaire de configuration du noyau
VI-D-2. Le choix des options
VI-D-3. Amélioration de la latence de Linux (pour le secondary mode)
VI-D-4. Fonctionnalités ou options Linux potentiellement problématiques ou incompatibles
VI-E. Compilation et installation du nouveau noyau
VI-F. Installation des bibliothèques Xenomai
VI-G. Démarrage sur le noyau incluant Xenomai
VI-H. Xenomai et le noyau Linux sont-ils correctement installés ?
VI-H-1. Première mesure de la latence
VI-H-2. Le fichier TROUBLESHOOTING
VI-H-3. Traquer les latences avec l'option I-pipe debugging
VI-I. Wiki d'I-Pipe Tracer
VI-J. Traquer les interruptions parasites avec powertop
Premiers pas
VII. Premiers pas
VII-A. Un grand classique : « Hello world! »
VII-B. La compilation
VII-C. L'exécution
VII-D. Que se passe-t-il ?
Exemples d'utilisation
VIII. Exemples d'utilisation
VIII-A. Avant d'utiliser les fonctions Xenomai : les environnements d'appels
VIII-B. Les tâches
VIII-B-1. Les paramètres de lancement d'une tâche
VIII-B-2. Tâches périodiques
VIII-B-3. Ce qui donne les traces suivantes :
VIII-B-4. Transformation d'un processus Linux en tâche Xenomai
VIII-B-5. Affectation tâche/processeur (affinity )
VIII-B-6. Contrôle du scheduling d'une tâche : la fonction rt_task_set_mode
VIII-C. Les sémaphores (à compteur et d'exclusion mutuelle)
VIII-D. Les files de messages
VIII-E. Les alarmes (watchdogs )
VIII-F. Les pipes et la communication avec les applications Linux « normales »
VIII-G. Nommage et rémanence des objets
VIII-H. Aperçu de l'API native
Exécution des programmes Xenomai et sécurité
IX. Exécution des programmes Xenomai et sécurité
IX-A. « Xenomai GID »
IX-B. Activation du bit d'endossement
IX-C. sudo
Méthodologie de développement
X. Méthodologie de développement
X-A. Prototypage de l'architecture dynamique
X-B. Pratiques
X-B-1. Les mauvaises...
X-B-2. ... et les bonnes
X-C. Aide à la mise au point
X-C-1. Ajout de traces
X-C-2. Détection des basculements « sauvages » en secondary mode
X-C-3. Tests de bon fonctionnement bas niveau
X-C-4. Utilisation du débogueur gdb
Étude de cas n° 1 : simulateur GPS
XI. Étude de cas n° 1 : simulateur GPS
XI-A. Fonctionnalités
XI-B. Architecture dynamique
XI-B-1. Schéma
XI-B-2. Justification
XI-B-2-a. Tâche TempsGPS
XI-B-2-b. Tâche TxTM
XI-B-2-c. Tâche RxTC
XI-B-2-d. Tâche PerioTM
XI-B-2-e. Tâche TraiteTC
XI-B-2-f. Tâche bvl_GPS
XI-B-2-g. Tâche JDB
XI-B-2-h. Tâche Traces
XI-B-2-i. Tâche main
XI-B-2-j. Files de messages
Étude de cas n° 2 : driver RTDM Fiji-Oslink
XII. Étude de cas n° 2 : driver RTDM Fiji-Oslink
XII-A. Ressources utiles
XII-B. Fonctionnalités
XII-C. Anatomie d'un driver RTDM
XII-C-1. Comment interfacer un driver RTDM : la structure rtdm_device
XII-C-2. Où mémoriser l'état d'un périphérique ouvert : le contexte
XII-C-3. Comment accéder à des zones de mémoire partagée avec les applications ?
XII-C-4. Comment partager du code en fonction du contexte d'appel ?
XII-D. Installation et désinstallation
Drivers
XIII. Drivers
XIII-A. Communication série
XIII-A-1. Matériels compatibles
XIII-A-2. Récupération de la configuration matérielle de la carte
XIII-A-3. Configuration du driver RTDM 16550A
XIII-A-4. Configuration de la liaison avec l'ioctlRTSER_RTIOC_SET_CONFIG
XIII-B. Comment écrire un driver PCI ?
XIII-B-1. Documentation de référence
XIII-B-2. Configuration vs initialisation
XIII-B-3. L'écriture d'un driver étape par étape
Métriques : mesures de performances et d'occupation mémoire
XIV. Métriques : mesures de performances et d'occupation mémoire
XIV-A. Latence sur basculement de contexte
XIV-B. Latence sur interruption
XIV-C. Taux d'occupation CPU
XIV-D. Taille de la pile
Simulation avec Xenosim
XV. Simulation avec Xenosim
Matériels : recommandations, constructeurs, compatibilités
XVI. Matériels : recommandations, constructeurs, compatibilités
XVI-A. Opto-isolation des interfaces
XVI-B. PC industriel
XVI-C. Refroidissement
XVI-D. Connectique (aka jurisprudence de la loi de Murphy)
XVI-E. Drivers Linux
Aspects juridiques, licences
XVII. Aspects juridiques, licences
XVII-A. Notions d'utilisation normale et de travail dérivé
XVII-B. Travail dérivé du noyau
XVII-C. Cession d'un produit basé sur Xenomai
XVII-D. Coût
Organisation du développement
XVIII. Organisation du développement
XVIII-A. Plusieurs développeurs sur le même poste
XVIII-B. Portabilité des Makefile
À l'aide !!!
XIX. À l'aide !!!
XIX-A. Les mailing-lists
XIX-B. Comment rédiger un message ?
À propos de l'auteur
XX. À propos de l'auteur
XXI. Annexes
XXI-A. Codes d'erreurs spécifiques Xenomai, causes possibles
XXI-B. Timers : indexation avec une table de hâchage
XXI-C. Exemple d'implémentation d'une tâche de traces (log.c)
XXI-D. Révisions du document


Valid XHTML 1.0 TransitionalValid CSS!

 
 
 
 
Partenaires

Hébergement Web