View the site in Français Site displayed in English (USA) View the site in English (GB)
You are here: ac6 > ac6-formation > Linux > Programmation Linux et uClinux

D0 Programmation Linux et uClinux

La programmation utilisateur sur Linux et µClinux

Objectifs
bullet_jaune_1 Découvrir Linux et ses outils de développement et de mise au point
bullet_jaune_1 Programmer et débugger des applications Linux
bullet_jaune_2 Programmation multi-tâches et temps réel
bullet_jaune_2 Communications inter-processus
bullet_jaune_2 Entrées-sorties
bullet_jaune_1 Linux et µClinux
Les exercices se font sur des cartes cibles :
    Carte "SnowBall" de ST-Ericsson, basée sur un ARM Cortex/A9 double cœur, avec sonde JTAG Lauterbach.
    Carte à base de processeur ARM9 d'Atmel, avec sonde JTAG Lauterbach.
    Pour uClinux, carte à base de Cortex/M3 (STM32) de STMicroelectronics, avec sonde JTAG Lauterbach.
Nous utilisons le dernier noyau disponible sur www.kernel.org
Matériel
bullet_jaune_2 Un PC Linux par binôme
bullet_jaune_2 Support de cours
bullet_jaune_2 CDROM avec documentation et exercices corrigés
Pré-requis
bullet_jaune_2 Connaissance de Linux utilisateur.
bullet_jaune_2 Connaissances générales en programmation C.

Outline
1er jour
Présentation & Architecture
bullet_jaune_2 Historique
bullet_jaune_2 Licences GPL et open source
bullet_jaune_2 Distributions et versions de Linux et uClinux
bullet_jaune_2 Architecture du kernel Linux et uClinux
Utilisation de Linux
bullet_jaune_2 Le système de fichier
bullet_jaune_2 Utilisation du shell et des scripts
bullet_jaune_2 L'éditeur vi
bullet_jaune_2 Administration de base
Le développement d'applications
bullet_jaune_2 Développement d'applications Linux
bullet_jaune_3 différence entre mode utilisateur et mode noyau
bullet_jaune_3 structure d'une application Linux
bullet_jaune_2 Développement d'applications uClinux
bullet_jaune_3 les formats d'exécutables uClinux
bullet_jaune_3 les options de compilation
bullet_jaune_2 Développement de librairies Linux
bullet_jaune_3 statiques (.lib)
bullet_jaune_3 dynamiques (.so)
bullet_jaune_2 Développement de librairies uClinux
bullet_jaune_3 statiques (.lib)
bullet_jaune_3 dynamiques (.so)
bullet_jaune_2 Outils de développement
bullet_jaune_3 les outils de compilation
bullet_jaune_3 la documentation (pages "man", info)
bullet_jaune_3 les makefile
bullet_jaune_3 environnements intégrés (Eclipse, Kdevelop,...)
bullet_jaune_2 Outils de debug et de mise au point
bullet_jaune_3 gdb
bullet_jaune_3 debug mémoire avec dmalloc et electric fence
bullet_jaune_3 analyse runtime complète avec Valgrind
Exercice : Ecriture d'une librairie mathématique simple compilée statiquement puis dynamiquement pour Linux et uClinux
2ème jour
Entrées/Sorties et Signaux
bullet_jaune_2 Interface standard des entrées/sorties
bullet_jaune_3 API
bullet_jaune_3 inodes et données
bullet_jaune_3 verrous
bullet_jaune_2 Programmation réseau
bullet_jaune_3 sockets
bullet_jaune_3 protocoles UDP et TCP
Exercice : Programmation d'une application client/serveur. Comparaison entre TCP/IP et UDP/IP.
bullet_jaune_2 Entrées-sorties asynchrones
bullet_jaune_3 mode non bloquant
bullet_jaune_3 E/S multiplexées
bullet_jaune_3 E/S notifiées
bullet_jaune_3 Asynchrone enchainé (API aio POSIX)
Exercice : Gestion de plusieurs connexions concurrentes par multiplexage d'I/O
bullet_jaune_2 Signaux POSIX et timers
bullet_jaune_3 types de signaux
bullet_jaune_3 réception d'un signal
bullet_jaune_3 fonctions utilisables dans un gestionnaire de signal
bullet_jaune_3 timers en mode utilisateur
3ème jour
Programmation Multitâches
bullet_jaune_2 Les processus
bullet_jaune_3 définition
bullet_jaune_3 structures du noyau
bullet_jaune_3 sécurité
bullet_jaune_3 cycle de vie (fork, exec,...)
bullet_jaune_3 Différence entre Linux et uClinux
Exercice : Gestion de plusieurs connexions concurrentes en multi processus (fork)
bullet_jaune_2 Les threads
bullet_jaune_3 définition (threads utilisateur et noyau)
bullet_jaune_3 threads POSIX (mutex, variables conditionnelles, Thread Specific Data,...)
Exercice : Gestion de plusieurs connexions concurrentes en multitâches (pthreads)
bullet_jaune_2 Gestion mémoire
bullet_jaune_3 gestion de la mémoire par la MMU (adresses virtuelles/physiques)
bullet_jaune_3 pagination et protection
bullet_jaune_3 swap
bullet_jaune_3 allocation mémoire
bullet_jaune_3 caches
bullet_jaune_3 différences entre Linux et uClinux
bullet_jaune_2 Ordonnancement
bullet_jaune_3 la commutation de contexte
bullet_jaune_3 politique d'ordonnancement "normale" (niveaux nice)
bullet_jaune_3 politique d'ordonnancement temps réel (FIFO ou Round Robin)
bullet_jaune_3 principe et performances de l'algorithme
bullet_jaune_3 ordonnancement SMP (Symetrical Multi Processor)
4ème jour
Communication entre tâches (IPC POSIX)
bullet_jaune_2 Présentation de la norme POSIX
bullet_jaune_2 Communication entre tâches
bullet_jaune_3 Mapping de fichier en mémoire
bullet_jaune_3 Mémoire partagée
bullet_jaune_3 Files de messages
bullet_jaune_3 Pipes
bullet_jaune_2 Synchronisation des tâches
bullet_jaune_3 sémaphores
bullet_jaune_3 mutex
bullet_jaune_3 signaux
bullet_jaune_2 Les IPCs System V sont décrites en annexe
Exercice : Mise en place d'un watchdog sur timeout pour fermer les connexions inactives sur un serveur