Formation : Linux, drivers et programmation noyau
Se former avec
ORSYS
- Renseignements :
- Durée : 4 Jours
- Type : En centre
- Diplômant : Oui
-
Prix H.T. € :1930.00
- Objectifs :
- Maîtriser le développement de pilotes de périphériques. Comprendre en détail les mécanismes internes du noyau. Savoir développer et intégrer de nouveaux éléments dans le noyau Linux.
- Pré-requis :
- Les participants doivent disposer d'une bonne connaissance de Linux et d'une bonne maîtrise de la programmation en C.
- Programmation Linux en mode noyau
- Le noyau Linux : concepts et licences. Implication de la GPL sur les développements noyau statiques et modulaires. Cycles de développement du noyau, versions et diffusion des sources.
- Mode superviseur et utilisateur, fonctionnement des appels système. Principes des modules et organisation des sources du noyau.
- Outils de développement (Gcc, Kconfig et Makefile) et de débogage (Kgdb, Ltt).
- Principe de compilation du noyau et des modules. Dépendances et contrôle de versions des modules. Exportation de symboles.
Travaux pratiques
Compilation et installation d'un noyau 2.6. Observation des appels système invoqués. Application de patches pour débogage noyau. Ecriture et test de modules simples. Utilisation du système de fichier sysfs. Intégration de modules dans la chaîne de compilation du noyau. Chargement automatique au boot.
Eléments essentiels de programmation noyau
- Différents types de périphériques : bloc, caractère, réseau et méthodes de développement.
- Contextes de fonctionnement du noyau : appel système, interruption et threads. Synchronisation des appels système par sémaphores et mutex. Protection des variables globales par spinlocks.
- Eléments temporels : ticks et jiffies, mesures horaires, attentes actives et sommeils. Programmation d'actions différées et timers.
- Représentation des processus et threads, tâche « current ». Accès aux informations concernant le processus en cours d'exécution. Préemptibilité du noyau 2.6.
- Correspondance des mémoires virtuelle et physique, espace d'adressage utilisateur et noyau.
- Communication avec les processus par le système /proc.
Travaux pratiques
Ecriture d'un module d'horodatage d'événements à haute précision. Utilisation de notre module pour chronométrer les phases de boot. Ecriture d'un module d'information sur les structures internes des processus.
Ecriture de driver, périphérique en mode caractère
- Ecriture de pilotes de périphériques : fichiers spéciaux (/dev), enregistrement du driver (numéros majeur et mineur), inscription des fonctions de rappel (callback). Fonctions essentielles d'ouverture, lecture, écriture, fermeture du périphérique.
- Fonctions avancées : paramétrage du périphérique (Ioctl), attentes d'événements, opérations non bloquantes et multiplexées.
- Accès au matériel : ports d'entrées-sorties, mapping de ports ou de plages de mémoire physique, allocation de mémoire.
- Gestion des interruptions : activation et désactivation à différents niveaux, installation d'un gestionnaire, partages d'interruptions, imbrication des appels des handlers, retard de la fin du traitement d'une interruption (Bottom half, Tasklet, Workqueue, Softirq).
- Implémentation des projections mmap et gestion des signaux.
Travaux pratiques
Ecriture progressive d'un pilote périphérique en mode caractère complet, incluant l'implémentation des appels système, la gestion des interruptions, l'utilisation d'entrées-sorties physiques, la protection des variables globales, l'appel de routines différées, et le paramétrage du driver avec les différentes méthodes étudiées.
Périphérique en mode bloc et système de fichiers
- Principe des périphériques en mode bloc. Enregistrement du driver. Callback de lecture et écriture. Support du formatage, et opérations avancées.
- Ordonnanceur des entrées-sorties par bloc du noyau 2.6, choix d'une stratégie.
- Conception des systèmes de fichiers. Enregistrement d'un nouveau système de fichiers. Implémentation des fonctions standard.
Travaux pratiques
Ecriture d'un pilote complet de périphérique virtuel (disque ram). Formatage et montage du disque ram. Implémentation d'un système de fichiers personnalisé. Ecriture d'un outil de formatage. Tests du système de fichier.
Eléments avancés de programmation noyau
- Allocations de mémoire : par zones physiques, virtuelles ou par pages. Gestion de caches et slabs.
- Modèle des drivers du noyau 2.6 : sous-systèmes, ensembles Kset et structures Kobject. Gestion des événements Hotplug.
- Accès au bus PCI : adressage, drivers, auto-détection et interruptions.
- Transferts DMA : organisation des adresses, allocation des buffers et transfert de données.
- Spécificité des architectures supportées par Linux : cache des données et barrières mémoire. Projection des ports d'entrées-sorties et des plages de mémoire physique.
Interfaces et protocoles réseau
- Gestion des interfaces réseau sous Linux. Enregistrement d'une interface net_device. Callback d'émission et réception. Activation et désactivation d'interface. Configuration des adresses réseau.
- Implémentation et options de la pile IPv4 sous Linux. Transfert des paquets sk_buff. Points d'entrée disponibles. Intégration d'un protocole. Résolution d'adresse et détail du routage.
Travaux pratiques
Ecriture d'un driver réseau pour périphérique virtuel. Initialisation et affectation d'adresse IP. Ecriture et intégration d'un protocole réseau personnalisé. Ecriture d'un module d'analyse statistique de la pile IP.
Drivers pour périphériques USB
- Principe des périphériques USB.
- Interface avec le module USB-core.
- Exploration de sysfs.
- Accès aux « endpoints » de dialogue.
- Types de périphériques.
- Construction d'un URB.
- Dialogue en modes « Contrôle » et « Interruption ».
- Inscription d'un gestionnaire de communication en modes « Bulk » et « Isochrone ».
Travaux pratiques
Enregistrement d'un driver USB. Etude des endpoints disponibles. Ecriture d'un driver pour carte d'acquisition Velleman K8055. Etude d'un driver en mode bulk. Ecriture d'un driver de webcam en mode isochrone.
2008 au 2009 (31)
2008 au 2009 (69)
2008 au 2009 ()
2008 au 2009 (35)
2008 au 2009 (13)
2008 au 2009 (44)
2008 au 2009 (75)
2008 au 2009 (92)