Formation Linux Temps-réel Xenomai version 1.0
Licence Copyright (c) 2005-2006 Stelian Pop <stelian.pop@openwide.fr> Copyright (c) 2005-2006 Philippe Gerum <rpm@xenomai.org> Copyright (c) 2005-2006 Open Wide <www.openwide.fr> Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 1.1 ou ultérieure publiée par la Free Software Foundation ; sans aucune section inaltérable; sans texte de première page de couverture; sans texte de dernière page de couverture. Une copie de cette Licence est incluse dans la section appelée GNU Free Documentation License de ce document et peut être consultée à l'adresse www.gnu.org/copyleft/fdl.html. 2
Contact Open Wide Paris Open Wide Lyon 14, rue Gaillon 75002 Paris 97, rue Racine 69100 Villeurbanne Tél: +33(0) 1.42.68.28.00 Fax: +33(0) 1.40.07.54.86 Tél: +33(0) 4.26.68.95.00 Fax: +33(0) 4.26.68.95.01 3
Sommaire Introduction à Linux et à l'open Source Tour d'horizon des Solutions Linux Temps-réel Xenomai introduction (objectif, historique, architecture) installation (configuration, compilation, testsuite) utilisation (mise en oeuvre de l'api POSIX) mise au point (debugger, tracer) 4
Première partie: Introduction à Linux et à l'open Source 5
Sommaire Présentation de Linux Historique de Linux Présentation de l'open Source Licences GPL / LGPL Ecosystème et outils 6
Présentation de Linux Système d'exploitation: Multi-tâche Multi-utilisateur Multi-plateforme Norme POSIX (UNIX) Non issu du code UNIX originel Logiciel libre 7
Historique Créé par Linus Torvalds en 1991 Initialement orienté x86 Originellement multi-tâche, multi-utilisateur Choix de l'environnement GNU (Stallman) Outils de développement (compilateur,...) Outils système (bash, ls, cp...) Publication des sources sur Internet Choix de la licence GPL. 8
Open Source GNU: Richard Stallman invente le copyleft Inversion de la logique de copyright Requiert la liberté d'étudier et de modifier les sources Couple la distribution des sources à celle du binaire Plusieurs variantes d'un même concept: Logiciel libre : l'accent est mis sur la liberté du logiciel (ethique) Open Source : l'accent est mis sur la supériorité technique du logiciel (utilitariste) Exemples: GPL, LGPL, BSD 9
Licence GPL GNU General Public License Liberté de copier, modifier et redistribuer les sources Interdiction de limiter cette liberté vis-à-vis d'un tiers Code source associé à la distribution du logiciel Exclusion de garantie Brevets associés devant être utilisables sans exclusive ni retribution Clauses originelles de la licence non-altérables en cas de variante 10
Licence LGPL GNU Lesser General Public licence (LGPL) Liberté de copier, modifier et redistribuer les sources Combinaison possible avec du logiciel sous licence nonlibre Exclusion de garantie Brevets associés devant être utilisables sans exclusive ni retribution Clauses originelles de la licence non-altérables en cas de variante Utilisé principalement pour les bibliothèques 11
Ecosystème et outils (1/4) Mixité de développeurs : bénévoles, professionnels, universitaires Organisation en méritocratie Projets et forks Variété de solutions (exemple: GNOME/KDE, vi/emacs etc.) Multiplicité d'approches Duplication d'efforts Cycle de développement Itératif et réactif, très court, parfois déstabilisant 12
Ecosystème et outils (2/4) Développement distribué H24, 7x7 Listes de diffusion Canaux IRC Rencontres annuelles Kernel Summit (Ottawa) FOSDEM (itinérant) RMLL (itinérant)... 13
Ecosystème et outils (3/4) Editeurs de texte: vi, emacs Compilation: outils GNU (gcc, gdb, gas, ld etc) IDE (peu utilisés): kdevelop, eclipse Gestion des sources: CVS, Subversion, git, etc Rapports de bugs: bugzilla, mantis Infrastructures globales: Sourceforge: sourceforge.net Savannah: savannah.org Gna: gna.org 14
Ecosystème et outils (4/4) Pas de contrôle centralisé D'un logiciel. Du développement d'un logiciel. Pas de vérrouillage fournisseur (vendor lock-in) Coût indirect à intégrer Support & évolution (sociétés tierces ou interne) Veille technologique 15
Deuxième partie: Solutions Linux Temps-réel 16
Sommaire Définitions Le besoin temps réel Les solutions: Linux standard Linux préemptif Linux PREEMPT_RT Hybrides: Linux + co-noyau RTLinux, RTAI, Xenomai Tableau comparatif des solutions 17
Définitions FAQ www.faqs.org/faqs/realtime-computing/faq/ Le temps-réel est une notion de garantie IEEE : exigence sur le temps de réponse autant que sur la qualité de fonctionnement POSIX : réaction appropriée en un temps borné à un événement 18
Le besoin Contexte industriel : Pilotage matériel (moteurs...) Acquisition de données (capteurs...) Piles protocolaires (GPRS, VoIP...) etc. Contrainte temps-réel induite : portage de code depuis un RTOS 19
Linux standard Solution clé en main (distributions généralistes ou spécialisées) Disponible sur 24 architectures et de nombreuses plates-formes Très bonnes performances globales Stable, mature (15 ans...) 20
Linux standard Fonctionnement (1/2) Traitements effectués par des processi Modes d'execution d'un processus espace utilisateur (applicatif) espace noyau (e.g. entrées-sorties) Préemption du traitement applicatif interruptions exceptions 21
Linux standard Fonctionnement (2/2) Désactivation des interruptions Pas de préemption en mode noyau Préemption par l'ordonnanceur interruption timer fréquence timer fixe (HZ = 1-10 ms) Ordonnancement par niveau de priorité Priorité dynamique standard Priorité statique FIFO (99 niveaux) 22
Linux standard Utilisation et performances Écriture de code noyau: API spécifique, limitée aux opérations "noyau" Langage C Écriture de code applicatif Multiples API Multiples langages Granularité du temps indexée sur HZ Aucune garantie sur le temps de latence maximum 23
Linux préemptif Solution clé en main distributions spécialisées embarqué / temps-réel pas de patch externe requis Disponible sur de nombreuses architectures option de préemption non stable sur toutes Bonnes performances globales surcoût tolérable lié à la préemptibilité noyau Stabilité et maturité premiers travaux sur la préemption noyau > 5 ans 24
Linux préemptif Fonctionnement Préemption noyau active, sauf : Dans les sections critiques SMP (spinlock) Sur contexte d'interruption Variantes de préemption PREEMPT_VOLUNTARY, points de préemption explicites couverture plus faible moins d'artefacts de synchronisation PREEMPT_DESKTOP, points de préemption implicites couverture plus large plus d'artefacts de synchronisation 25
Linux préemptif Utilisation et performances Même utilisation que Linux standard : écriture de code noyau écriture de code applicatif Légère amélioration de la latence moyenne Pas de réduction significative de la latence maximale Moins d'amplitude dans les pics de latence Système non temps-réel au sens strict 26
Linux PREEMPT_RT Patch expérimental sur base 2.6.x (-rt) people.redhat.com/mingo/realtime-preempt Disponible sur quelques architectures Threaded interrupt model Prévention des inversions de priorité (par héritage) Réécriture complète des mécanismes de synchronisation Timers noyau haute précision 27
Linux PREEMPT_RT Fonctionnement Remplacement spinlocks -> mutexes (quasiment) plus d'attente active pour exclusion mutuelle Routines d'interruption sur contextes de tâches préemption des ISRs possible Prévention des inversions de priorité support de l'héritage de priorité par les mutexes Timers haute précision délais et échéances en microsecondes La quasi-totalité du code noyau est preemptible 28
Linux PREEMPT_RT Utilisation et performances Changements significatifs du code noyau sémantique de verrouillage des sections critiques inspection nécessaire de tous les composants Le coût de la préemption peut être important Temps de latence maximum nettement amélioré borne supérieure encore indéfinie dépend largement de la plate-forme matérielle dépend de la configuration logicielle 29
Linux + co-noyau Ajout d'un co-noyau pour la gestion temps-réel Sous-système temps-réel intégré dans un module noyau Patch de virtualisation des interruptions Différents modèles programmatiques Noyau uniquement (RTLinux/GPL, www.rtlinux-gpl.org) Noyau & espace utilisateur, semi-intégration Linux (RTAI, www.rtai.org) Noyau & espace utilisateur, intégration Linux complète (Xenomai, www.xenomai.org) 30
Linux + co-noyau Fonctionnement Séparation entre le composant temps-réel et Linux Ordonnanceur temps-réel spécifique Pas de dépendance sur les sections critiques Linux Virtualisation de la gestion d'interruptions Linux Routage prioritaire des IRQs vers le co-noyau Activation de l'ordonnanceur temps-réel Linux comme tâche idle du co-noyau 31
Linux + co-noyau Utilisation et performances Changement minimal sur le noyau Linux patch de virtualisation d'interruptions pas d'impact sur l'écriture de code noyau classique Impact sur l'écriture de code temps-réel utilisation d'apis fournies par le co-noyau notion de domaine d'exécution (temps-réel / normal) Garanties temps-réel fortes ordonnanceur spécifique indépendant sous-système temps-réel bien délimité Latence maximale < 20 microsecondes 32
Solutions Linux temps réel Comparaison des solutions Linux Linux préemptif Linux PREEMPT_RT RTLinux RTAI Xenomai Type scheduler optimisation optimisation standard scheduler scheduler co-noyau co-noyau co-noyau intégré toutes toutes i386, alpha, arm, blackfin, i386, ppc, arm, Plate-forme toutes (problèmes (problèmes mips, ppc i386, ia64, ppc mips, cris possibles) possibles) (+propriétaire) POSIX PSE51 multiples 32/64 API noyau, POSIX noyau, POSIX noyau, POSIX spécifique noyau API noyau communes standard standard standard ou user uniquement noyau/user Temps de latence moyen HZ (1-10 ms) HZ(1-10 ms) 10 20 us < 5 us < 5 us < 5 us Temps de latence max 70-100? us < 20 us < 20 us < 20 us Etat stable stable experimental développement actif stable, maintenance éteinte stable, évolutions chaotiques stable, développement actif 33
Solutions Linux temps réel Pointeurs Linux, Linux préemptif: http://www.kernel.org PREEMPT_RT: http://people.redhat.com/mingo/realtime-preempt RTLinux: http://www.fsmlabs.com RTLinux GPL: http://www.rtlinux-gpl.org RTAI: http://www.rtai.org Xenomai: http://www.xenomai.org 34
Troisième partie: Xenomai 35
Sommaire Introduction Historique Description fonctionnelle Architecture Installation Domaines d'exécution Design d'application Interfaces temps-réel Outils de mise au point Stratégie de portage 36
Introduction Xenomai, sous-système temps-réel de Linux Faible latence Espace utilisateur RTOS générique + interfaces Emulation de RTOS traditionnels Complètement intégré à Linux Licence GPL (coeur), LGPL (interfaces) 37
Xenomai Historique Fondation en 2001 Xenomai v0.5 Septembre 2001 Xenomai v1.1.1 Décembre 2002 Intégration à RTAI en 2003 RTAI/fusion v0.1 Juin 2004 Indépendance reprise en 2005 Xenomai v2.0 Octobre 2005 (base RTAI/fusion v0.9.1) Xenomai v2.1 Mars 2006 Xenomai v2.2 Juillet 2006 38
Xenomai Ressources Sites Internet http://www.xenomai.org http://gna.org/projects/xenomai Listes de diffusion xenomai core xenomai help ressources complémentaires http://www.captain.at/xenomai.php 39
Xenomai Description fonctionnelle (1/3) Adaptabilité coeur de RTOS générique spécialisation d'interfaces ou skins Intégration Linux forte sous-système noyau Multi plates-formes arm, blackfin, i386, ia64, powerpc32, powerpc64 simulateur Modèle de programmation espace noyau 40
Xenomai Description fonctionnelle (2/3) Code applicatif VxWorks Code applicatif POSIX glibc Xenomai libvxworks glibc Xenomai libpthread Appels système Pile réseau Xenomai RTOS VFS/FS... Noyau Adeos I-Pipe Hardware 41
Xenomai Description fonctionnelle (3/3) Code applicatif VxWorks Code applicatif POSIX glibc Xenomai libvxworks glibc Xenomai libpthread Xenomai Skin VXWorks Skin POSIX Nucleus (RTOS générique) SAL/HAL Adeos I-Pipe 42
Xenomai Architecture (1/3) Application temps-réel API temps-réel (skin) co-noyau Xenomai (nucleus) SAL/HAL Adeos couche API (POSIX, psos+, VRTX, VxWorks, uitron...) RTOS générique Dépendances matérielles 43
Xenomai Architecture (2/3) Interfaces temps-réel, ou skins absence d'api centrale et unique spécialisations d'un RTOS générique outil de migration RTOS générique objets temps-réel réutilisables Couches d'abstraction d'architecture hôte System Abstraction Layer (SAL) Hardware Abstraction Layer (HAL) Adeos 44
Xenomai Architecture (3/3) Pipeline ADEOS IRQ, Traps Domaine Xenomai Domaine racine... noyau Linux 45
Xenomai Installation (1/2) Etapes majeures Téléchargement des sources noyau Linux officiel (http://ftp.kernel.org/) Xenomai (http://download.gna.org/xenomai/) Préparation des sources noyau patch Adeos intégration du code Xenomai génération et installation du noyau génération et installation du support utilisateur redémarrage, test, troubleshooting 46
Xenomai Installation (2/2) Configuration BIOS particulière (x86) Désactivation legacy USB support Options noyau particulières (x86) Désactivation APM Désactivation CPU_FREQ Désactivation ACPI_PROCESSOR Activation USB host controller driver Configuration Xenomai spécifique (x86) Désactivation sources SMI 47
Xenomai Domaines d'exécution (1/3) Dualité d ordonnancement Domaine Xenomai, déterministe Domaine Linux, non déterministe Exécution d'une tâche temps-réel Mode primaire (domaine Xenomai) Mode secondaire (domaine Linux) Migration de modes Automatique sur appels système Contrôle pour mise au point (SIGXCPU) 48
Xenomai Domaines d'exécution (2/3) Domaine Linux (noyau standard) Domaine Xenomai (co-noyau) Applications TR espace utilisateur Contrôle masque IRQ Virtualisation d'interruptions (Adeos) Sources d'interruptions 49
Xenomai Domaines d'exécution (3/3) Appel système Linux (glibc) Domaine Linux Domaine Xenomai Migration d'appel système Exécution tâche temps-réel Appel système Xenomai (skins) 50
Xenomai Design d'application Ségrégation des activités temps-réel utilisation des domaines d'exécution mixage d'api Choix d'une interface programmatique création ou migration? modèles de programmation noyau / utilisateur Le modèle pour pilotes temps-réel abstraction et normalisation A faire et à ne pas faire 51
Xenomai Interfaces temps-réel (1/2) Personnalités temps-réel native posix psos+ rtai uitron vrtx vxworks API pour pilotes temps-réel de périphériques rtdm 52
Xenomai Interfaces temps-réel (2/2) Interface syscall Native POSIX RTDM VxWorks psos... Real time RTOS générique nucleus(nucleus) SAL/HAL Adeos Applications en espace utilisateur Applications en espace noyau 53
Xenomai Interface POSIX (1/2) Convergence POSIX 1003.1b pthreads horloges et timers mutexes, variables condition, sémaphores files de messages, mémoire partagée quelques extensions (ex. interception IRQ) Substitution transparente NPTL / LinuxThreads Options de compilation spécifiques Mixage possible avec POSIX glibc Migrations de domaine implicites 54
Xenomai Interface POSIX (2/2) Interface standard d'appels système Services noyau Linux API POSIX co-noyau Xenomai Applications espace utilisateur Applications espace noyau 55
Xenomai Interface native Interface temps-réel traditionnelle tâches timers mutexes, variables condition sémaphores, groupes d'événements files de messages, mémoire partagée régions de mémoire FIFO intra et inter-domaines (message pipes) interception d'irq Mixage possible avec autres skins et glibc 56
Xenomai Mise en oeuvre POSIX Génération d'exécutables Mixage avec NPTL / LinuxThreads Exercices substitution de services POSIX standard multi-threading temps-réel simple traitements cycliques haute précision mixage services Xenomai et standard 57
Xenomai Drivers temps-réel Interface RTDM Génération d'exécutables Exercices pilote de périphérique nommé pilote de protocole 58
Xenomai Outils de mise au point Interface /proc/xenomai GDB simulateur Xenomai traceur I-Pipe KGDB 59
Xenomai Interface /proc Activité des skins /proc/xenomai/interfaces/, registry/, rtdm/ Comptabilité des événements système /proc/xenomai/irq, apc, faults Statut des tâches temps-réel /proc/xenomai/sched, stat Contrôle du timer temps-réel /proc/xenomai/timer, latency Identification du système /proc/xenomai/hal, version 60
Xenomai Utilisation de GDB Mise au point classique espace utilisateur Programme GDB standard compatible tous front-ends Altération du fonctionnement temps-réel perte du déterminisme tâches tracées en mode secondaire points d'arrêt à «temps zéro» 61
Xenomai Simulateur (1/3) Simulation événementielle exécutable de simulation «tout-en-un» IHM spécialisée avec interface GDB Prototypage de code nouvelles interfaces (skins) partie générique de drivers temps-réel contexte indépendant API Linux (noyau, glibc) Tests exécution 100% reproductible campagnes de non-regression 62
Xenomai Simulateur (2/3) Installation dépendances logicielles compilation Démonstration 63
Xenomai Simulateur (3/3) 64
Xenomai Mise au point traceur I-Pipe Complément Adeos/I-Pipe patch additionnel Repérage des sources de latence recherche de sections de masquage d'irq traces symboliques Disponible pour i386 et ppc 65
Xenomai KGDB Complément de Adeos/I-Pipe patch additionnel Mise au point du coeur Xenomai / Adeos Adaptation de KGDB au contexte Adeos Fonctionnalités GDB standard Disponible pour i386 66
Xenomai Stratégie de portage Portage Adeos insertion coeur générique (kernel/ipipe/) interception des IRQ (arch/*/kernel/) interception des exceptions (arch/*/kernel/) insertion des notifications d'événements (kernel/) Portage HAL programmation du timer matériel (include/asm-*/hal.h) arithmétique optimisée (include/asm-*/hal.h) Portage SAL changement de contexte (include/asm-*/bits/pod.h) 67
Xenomai Conclusion Spectre applicatif temps-réel pas de solution Linux «tout-en-un» Exigences variables d'une application à l'autre d'une tâche à l'autre dans une même application besoin d'accès aux services Linux standard Modèle programmatique classique intégration transparente du support temps-réel protection mémoire accès aux outils standard (ex. GDB) 68