Formation Linux, drivers et programmation noyau

La formation Linux, drivers et programmation noyau permet de maîtriser parfaitement le développement de pilotes de périphériques ( drivers ). À l’issue de la formation, le participant sera en mesure de comprendre en détail les mécanismes internes du noyau, de savoir développer et intégrer de nouveaux éléments dans le noyau Linux, ou encore d'écrire un pilote périphérique en mode caractère ou bloc.

Le participant apprendra à manier les différents types de périphériques, et à profiter d'une gestion complète de la mémoire.

Formation Linux, drivers et programmation noyau

À l’issue de la formation, le participant sera en mesure de :

  • 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
  • Ecrire un pilote périphérique en mode caractère ou blo

Evaluation de la formation et de votre progression vers vos objectifs

Avant le début de la formation, un questionnaire vous permettra d’exprimer vos objectifs personnels et d’évaluer votre degré de maîtrise des principales thématiques abordées dans la formation.

Pendant la formation, le formateur observera vos pratiques afin de pouvoir vous donner des conseils personnalisés quant aux points forts sur lesquels vous pourrez vous appuyer et aux points de vigilance sur lesquels il doit axer ses efforts.

À la fin de la formation, vous aurez à remplir un questionnaire (QCM et/ou des ateliers et des exercices pratiques) pour évaluer vos nouvelles compétences et votre progression vers vos objectifs. Un questionnaire supplémentaire vous permettra d'indiquer votre niveau de satisfaction à l'égard de la formation.

Un questionnaire d’auto-évaluation à froid vous sera proposé 6 à 9 mois après la fin de formation. Celui-ci vous permettra de prendre du recul sur 

les bénéfices acquis, les efforts restant à déployer et votre degré de satisfaction vis à vis de la formation. 

Cette formation s'adresse aux développeurs Linux/Unix.

4 JOURS 

Présentation du noyau

  • Vue d'ensemble du système et rôle du noyau.
  • Les sites de référence.
  • Spécificités des noyaux 3.x et 4.x.
  • Cycles de développement du noyau, les patchs.
  • Mode de fonctionnement (superviseur et utilisateur). Appels système.
  • Organisation des sources (Include/linux, Arch, Kernel, Documentation...).
  • Principe de compilation du noyau et des modules.
  • Les dépendances et symboles.
  • Les exportations de symboles.
  • Le chargement du noyau (support, argument...).


Travaux pratiques

Compilation et installation d'un noyau 3.x.

Les outils utilisables

  • Outils de développement (Gcc, Kbuild, Kconfig et Makefile...).
  • Outils de débogage (GDB, KGDB, ftrace...).
  • Environnement de débogage (Linux Trace Toolkit...).
  • Outil de gestion de version (Git...).
  • Tracer les appels système (ptrace...).


Travaux pratiques

Installer l'ensemble des outils et des sources pour générer un module pour le noyau. Configurer le système pour effectuer le chargement automatique de module au boot. Ecriture et test de modules simples.

Gestion des threads, scheduling

  • Les différents types de périphériques.
  • Contextes de fonctionnement du noyau. Protection des variables globales.
  • Représentation des threads (état, structure task_stru, thread_info...).
  • Les threads, contexte d'exécution.
  • Le scheduler de Linux et la préemption.
  • Création d'un thread noyau (kthread_create, wakeup_process...).


Travaux pratiques

Créer un module qui crée un thread noyau lors de l'insertion et le décharge lors du rmmod. Ecriture d'un module d'horodatage d'événements à haute précision. Ecriture d'un module d'information sur les structures internes des processus.

Gestion de la mémoire, du temps et de proc

  • L'organisation mémoire pour les architectures UMA et NUMA.
  • L'espace d'adressage utilisateur et noyau.
  • La gestion de pages à la demande (demand paging).
  • Allocations mémoire, buddy allocator, kmalloc, slabs et pools mémoire.
  • La gestion des accès à la mémoire (les caches et la MMU).
  • Les problèmes liés à la sur-réservation de la mémoire.
  • Gestion de la mémoire sur x86 et ARM, utilisation des Hugepages.
  • Optimisation des appels systèmes (IAPX32, VDSO).
  • Synchronisations et attentes dans le noyau, waitqueues, mutex et les completions.
  • Les ticks et les jiffies dans Linux.
  • L'horloge temps réel, RTC (real Time Clock), implémentation des timers.
  • Interface timers haute résolution, estampilles.
  • Les outils spécifiques au noyau, listes chaînées, kfifo et container_of.
  • L'interface noyau avec /proc par le procfs.


Travaux pratiques

Utilisation des timers et des estampilles. Implémentation d'un accès au procfs. Mise en œuvre de l'allocation mémoire dans le noyau et optimisation à l'aide des slabs.

Périphérique en mode caractère

  • Ecriture de pilotes de périphériques caractère.
  • Le VFS (Virtual File System).
  • Les méthodes associées aux périphériques caractères.
  • Gestion des interruptions DMA et accès au matériel.
  • Enregistrement des pilotes de périphériques de type caractère et optimisations.


Travaux pratiques

Ecriture progressive d'un pilote périphérique en mode caractère. Implémentation des synchronisations d'entrée-sortie entre threads et avec la routine d'interruption. Implémentation de l'allocation mémoire.

Linux Driver Framework - sysfs

  • Présentation du framework, kobject, kset et kref.
  • Les objets drivers, device driver, bus et class.
  • Utilisation et génération des attributs présentés dans le sysfs.
  • Interface avec le hotplug, méthodes match, probe et release.
  • Gestion du firmware.
  • Gestion de l'énergie, méthodes de gestion de l'énergie.


Travaux pratiques

Implémentation d'un bus, d'un driver et d'un device driver. Adaptation du pilote de périphériques caractère. Exemple d'utilisation de l'interface.

Périphérique en mode bloc et systèmes 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.
  • Conception des systèmes de fichiers.
  • Enregistrement d'un nouveau système de fichiers.


Travaux pratiques

Exemple de pilote complet de périphérique virtuel. Exemple d'un système de fichiers personnalisé.

Interfaces et protocoles réseau

  • Gestion des interfaces réseau sous Linux.
  • Utilisation des skbuff.
  • Les hooks netfilter.
  • Intégration d'un protocole.


Travaux pratiques

Exemple de driver réseau pour périphérique virtuel. Implémentation de protocole réseau.

Drivers pour périphériques USB

  •     Principe des périphériques USB. Interface avec le module USB-core.
  •     Interaction du périphérique avec le noyau Linux.
  •     Construction d'un URB (USB Request Block).
  •     Les gadgets USB.


Travaux pratiques

Enregistrement d'un driver USB. Ecriture d'un driver en mode isochrone.

 

Méthodes et moyens

Cette formation repose sur une combinaison de constructions participatives, de mises en perspectives par des apports théoriques et méthodologiques, et de mises en situation (simulation et jeux de rôle) permettant de mettre en évidence les difficultés et de découvrir progressivement les méthodes et techniques appropriées. 

Bonnes connaissances de Linux/Unix et de la programmation C.

  • Rugosité
  • Consciencieux
REF:
NUM_DEV_11
Durée:
4 jours
Modalité Pédagogique:
Nombre de participants:
Prix:
2 500,00 €
Prochaine date de formation : Le délai moyen de mise en œuvre est de 3 semaines à la suite de votre demande.
Modifié le 19-10-2023
REF:
NUM_DEV_11
Durée:
4 jours
Modalité Pédagogique:
Nombre de participants:
Prix:
2 500,00 €
Prochaine date de formation : Le délai moyen de mise en œuvre est de 3 semaines à la suite de votre demande.
Modifié le 19-10-2023