Accueil Formations Développements Documents Présentation Contact
Logiciels
• Netpipe
• IP-multiserv
Autres logiciels…
Articles
• Linux : histoire d'un noyau
• Lancer une application au démarrage de Linux
• Sécuriser l'accès à une station Linux
Autres articles…
Documents
• Aides-mémoire Unix & Linux
• Manuel Linux en français
Livres
• Programmation système en C sous Linux
• Langages de scripts sous Linux
Présentation
• Renseignements
• Contact
Linux Temps-Réel et Embarqué

L'utilisation de Linux dans les environnements industriels, pour des applications à fortes contraintes temporelles ou sur des systèmes retreints nécessite une bonne connaissance des mécanismes sous-jacents, comme l'ordonnancement des tâches, la gestion mémoire, ou le fonctionnement des drivers du noyau.

Ce cours vous propose une exploration en profondeur de l'ordonnanceur, et l'étude des possibilités - et des limites - de Linux pour des applications temps-réel.

En outre on y trouvera une présentation détaillée des outils et environnements de développement, ainsi que les solutions disponibles pour la construction de systèmes embarqués autour d'un noyau Linux.

Organisation

Durée : 4 jours.
Pré-requis : les participants doivent avoir une connaissance du système Unix/Linux (niveau utilisateur), ainsi qu'une bonne familiarité avec le langage C.

Thèmes abordés

  • Développement industriel sous Linux : outils de développement et de mise au point des applications, utilisation de l'environnement Eclipse, compilation et débogage croisés pour une cible embarquée, ajustement et compilation du noyau Linux.
  • Ordonnancement sous Linux : multi-tâche (processus et threads) et communication entre tâches, configuration de l'ordonnanceur temps-partagé classique, utilisation de l'ordonnanceur temps-réel (souple) de Linux.
  • Temps-réel strict sous Linux : principe du temps-réel strict, solutions pour Linux, mise en oeuvre et développement avec les solutions RTAI et Xenomai.
  • Linux embarqué : panorama de solutions embarquées avec Linux ou ucLinux, construction d'un noyau et d'un environnement réduit, étude du boot du système, démarrage automatique des applications personnalisées.
e

Plan détaillé

Première journée - Environnements et outils de développement industriel sous Linux

1ère séquence 9h00-10h30 - Environnement Linux

Introduction à Linux et aux logiciels libres.
Licences GPL, LGPL, BSD et implications pour le développement industriel.
Versions du noyaux et distributions courantes de Linux.

2ème séquence 10h45-12h15 - Outils de développement libres

Environnements intégrés (Eclipse, KDevelop).
Editeurs de textes (Vi, Emacs, Nedit, Kwrite).
Outils de compilation (Gcc, Tcc, Gas) et fichiers Makefile.
Outils de débogage et de mise au point (Gdb, Ddd, Gprof, Gcov, Strace, Ltrace).
Débogage des allocations mémoire (Mtrace, Mcheck, Electric Fence, Valgrind).
Compilation et utilisation de bibliothèques statiques et dynamiques.

Travaux pratiques :
Utilisation du compilateur GCC, effets des différentes options.
Détection d'erreurs à la compilation, à l'édition des liens.
Débogage en cours de fonctionnement avec GDB.
Débogage post-mortem avec GDB.
Détection de fuites mémoires.
Détection de débordements de buffers.
Statistiques d'exécution et tests en couverture.

Pause déjeuner

3ème séquence 13h30-15h15 - Développement avec Eclipse et le CDT

Présentation et utilisation de l'environnement Eclipse avec le plug-in CDT.
Création de projet, assistance en ligne, indexation.
Débogage classique, débogage post-mortem, débogage d'application en fonctionnement.

Travaux pratiques :
Création et compilation d'application avec Eclipse.
Utilisation du débogueur intégré.
Compilation et utilisation de bibliothèques statiques et dynamiques avec Eclipse.

4ème séquence 15h30-17h00 - Développement avancé, contexte industriel

Compilation et installation du noyau Linux 2.6.
Création et utilisation d'une chaîne de compilation croisée.

Travaux pratiques :
Compilation et installation d'un noyau Linux personnalisé.
Utilisation d'une chaîne de compilation croisée et test sur carte à processeur ARM.
Utilisation d'Eclipse pour compilation croisée et débogage distant (du PC de développement vers la cible à processeur ARM).

Deuxième journée - Ordonnancements temps-partagé et temps-réel souple

1ère séquence 9h00-10h30 - Multi-tâches sous Linux

Processus : principe, création, déroulement…
Threads : concepts, création et exécution de threads.
Synchronisation de tâches : sémaphores, mutex, signaux, etc.

Travaux pratiques :
Création de processus, attente de fin de processus fils, transmission de code de retour.
Création de threads, vérification du partage des données.
Synchronisation de threads par mutex et verrous rwlock.
Synchronisation de processus par sémaphores et signaux.

2ème séquence 10h45-12h15 - Mesures horaires et attentes

Précision des mesures horaires et des attentes (usleep et nanosleep).
Fonctionnement périodique (setitimer et timers Posix).

Travaux pratiques :
Verification de la précision des mesures avec time(), gettimeofday() et lecture du TSC.
Vérification de la granularité et de la régularité des sommeils et des timers.

Pause déjeuner

3ème séquence 13h30-15h15 - Temps partagé sous Linux

Configuration des priorités des processus.
Implications de la préemptibilité du noyau 2.6.

Travaux pratiques :
Influences des priorités sur l'ordonnancement temps-partagé.
Visualisation du partage du temps CPU entre processus.

4ème séquence 15h30-17h00 - Temps-réel souple Posix.1b

Principes, configuration de l'ordonnancement temps-réel des processus et des threads.
Problèmes algorithmiques liés au temps-réel (synchronisation, inversion de priorité, etc.) et solutions.
Limites du temps-réel sous Linux standard.

Travaux pratiques :
Étude de l'ordonnanceur Linux : Noyaux 2.0 à 2.4, noyaux 2.6.
Création de processus temps-réel. Verification de leur efficacité.
Vérification de la précision des timers et sommeils.

Troisième journée - Temps-réel strict sous Linux

1ère séquence 9h00-10h30 - Linux et le temps-réel strict

Concepts de temps-réel strict : Principe des micro-noyaux RT-Linux, RTAI, Adeos, Xenomai, LXRT.
Installation de RTAI et écriture de taches.

Travaux pratiques :
Compilation et installation de RTAI.
Création de tâches temps-réels simples.

2ème séquence 10h45-12h15 - API essentielle de RTAI

Tâches périodiques et sporadiques.
API de RTAI : attentes actives et mises en sommeil.
Timers temps-réel. Configuration du timer matériel.
Choix d'un ordonnancement périodique ou one-shot.
Synchronisation des tâches par sémaphores, files de message et RPC.
Communication avec les processus utilisateur par fifos temps-réel et buffers partagés.

Travaux pratiques :
Création de tâches périodique.
Communication entre tâches temps-réel et processus.
Vérification de la granularité et de la précision des timers.

Pause déjeuner

3ème séquence 13h30-15h15 - RTAI avancé et LXRT

Gestion bas-niveau des interruptions, et émulation d'interruptions pour le noyau Linux.
Utilisation de l'extension LXRT : Ordonnancement temps-réel strict en mode utilisateur.

Travaux pratiques :
Création de tâches et basculement en temps-réel strict.
Gestion des interruptions depuis l'espace utilisateur.
Communication avec les autres tâches.

4ème séquence 15h30-17h00 - Xenomai :une autre solution temps-réel

Installation et API de Xenomai : API native et émulation des API Psos, Vrtx, VxWorks.

Travaux pratiques :
Installation de Xenomai.
Ecriture de tâches périodiques et de gestionnaires d'interruption.
Utilisation des API d'émulation.

Quatrième journée - Environnements restreints et systèmes embarqués

1ère séquence 9h00-10h30 - Choix d'une solution embarquée

Problématique des systèmes embarqués. Contraintes matérielles, logicielles et opérationnelles.
Choix d'un système d'exploitation embarqué. Panorama de solutions libres.
Système uCLinux : API, environnement de développement.
Linux embarqué : choix d'une version du noyau, et options essentielles pour la réduction de sa taille.
Système de fichiers généraux (Ext2/3, Reiserfs, Vfat) et spécifiques pour les systèmes embarqués (Cramfs ou Jffs).

Travaux Pratiques :
Installation de la chaîne de compilation uCLinux. Compilation d'une application personnalisée pour uCLinux.
Transfert et test sur cible à processeur MC68EZ328.
Compilation d'un noyau Linux de taille réduite.
Création d'un système de fichiers.

2ème séquence 10h45-12h15 - Construction d'une solution embarquée personnelle

Bibliothèques système standards et réduites (uClibc, Newlib, DietLibc).
Applications et utilitaires à embarquer (Busybox, TinyLogin, EmbUtils, etc.).
Applications réseau minimales. Configuration de Bootp, Nfs, Tftp.
Interface utilisateur : Notification par Leds, afficheur LCD texte (LCDproc) ou graphique (uLCD), écran texte, semi-graphique (Ncurses) et graphique.
Interfaces graphiques optimisées. Configuration du FrameBuffer Vga et Vesa. Utilisation des modules DirectFB et FBUI.
Interfaces graphiques Qt-embedded, Gtk, Nano-X.
Configuration d'un chargeur de démarrage (Uboot, RedBoot, Grub, Lilo). Installation en mémoire flash (XIP).

Travaux pratiques 
Incorporation d'applications minimales et test sur périphérique amovible (disquette ou clé USB).
Ecriture d'application utilisant une interface par Leds ou afficheur LCD.
Utilisation d'un environnement graphique minimal nano-X. Installation et configuration d'un serveur HTTP embarqué.

Pause déjeuner

3ème séquence 13h30-15h15 - Analyse et personnalisation du boot du système

Phase de boot : Mise sous tension, Bios, Chargeur (Lilo, Grub, UBoot) du noyau.
Démarrage du noyau et chargement d'un disque ram préliminaire (initrd). Lancement du processus Init.
Initialisation depuis l'espace utilisateur : fichier /etc/inittab et script rc.sysinit.
Changement de RunLevel et invocation des scripts rc.d.
Chargement des services (démons).
Rappels concernant la programmation shell.

Travaux pratiques :
Création et personnalisation d'un disque initrd.
Remplacement du processus Init par une version personnalisée et remplacement par un script shell.
Lancement d'un démon en arrière-plan.
Démarrage automatique d'une application en mode texte, et en mode graphique.

4ème séquence 15h30-17h00 - Conclusion

Notions de sécurité informatique sur les systèmes embarqués.
Discussions libres sur l'ensemble des thèmes abordés.

Travaux pratiques :
Expérimentations libres suivant les demandes des participants.

Accueil | Contact | Mentions légales

Conception : Logilin - Formations Linux