Formation « Écriture de drivers pour le kernel Linux »

Drivers Kernel Linux

Le support pour les périphériques est assuré sous Linux par des drivers (pilotes) dont le code s’exécute dans le kernel (noyau) du système d’exploitation. Cette formation vous permettra d’écrire ou maintenir des drivers en maîtrisant les concepts propres à la programmation noyau.

Ce cours propose une approche originale, s’appuyant sur l’écriture progressive de drivers de différents types, pour appréhender les mécanismes parfois complexes (préemptibilité, multiprocesseur, support d’architectures différentes, etc.) inhérents au code exécuté en mode kernel.

Objectifs de la formation

  • Comprendre les concepts et techniques de programmation noyau sous Linux.
  • Savoir analyser et intégrer des drivers pour divers types de périphériques.
  • Comprendre les problématiques d’écriture de drivers performants et robustes.

Pré-requis

Une connaissance de Linux (niveau utilisateur) est indispensable, et il est préférable d’avoir des notions de langage C.

Public visé

Développeur, chef de projet devant développer ou maintenir des drivers ou simplement comprendre en profondeur le fonctionnement de Linux.


Programme de la formation

Le noyau Linux et ses modules

Noyau Linux : modèle, versions, évolutions du kernel, modules.²²²
Développement en mode kernel : outils, compilation du noyau, programmation en mode kernel.
Écriture de modules noyau : headers, macros, licences, messages, Makefile, dépendances.
Travaux pratiques : manipulation de modules précompilés, écriture, compilation et test d’un module, tests de modules avec dépendances.

Les appels-système de Linux

Appels-système : principe, suivi d’un appel-système.
Environnement du noyau : contexte de tâche, espaces d’adressage et échanges.
Système de fichiers /proc : ajout d’entrée, méthodes de lecture et d’écriture.
Travaux pratiques : appels-système invoqués par une application, échange de données entre espace utilisateur et kernel.

API interne du kernel

Fonctions habituelles de libC : chaînes, mémoire, fonctions mathématiques.
Mise au point et débogage : warning, panic.
Élements temporels : ticks, mesure du temps, attentes, actions différées.
Gestion mémoire : allocation, gestion des pages.
Travaux pratiques : mesure de granularité d’horodatage, de précision des timers, appels-systèmes de bases, manipulation des adresses virtuelles, physiques et de pages mémoire.

Driver en mode caractères

Enregistrement d’un driver : principe, numéros, modèle de drivers, classes.
Méthodes d’un driver : open(), close(), read(), write(), ioctl().
Synchronisation entre appels-système : nécessité d’une synchronisation, mutex.
Travaux pratiques : numéros majeur-mineur, appel des méthodes du driver, classe personnalisée, écriture d’un driver simple, implémentation d’un ioctl().

Accès au matériel

Entrées-sorties : ports dédiés, mapping en adresses virtuelles, GPIO, bus PCIe.
Interruptions : contexte d’interruption, handlers, activation et désactivation, routine de service.
Traitement différé : tasklet, workqueue, threaded interrupt.
Synchronisation et attente d’événement :
spinlock(), wait_queue, méthodes bloquantes et non-bloquantes.
Projection mémoire : méthode mmap(), DMA.
Travaux pratiques : interactions par GPIO, écriture d’un handler d’interruption, driver virtuel en mode caractère, synchronisation par mutex et spinlock, utilisation d’une waitqueue, implémentation de mmap().

Driver réseau

Périphérique réseau : interfaces, protocoles, enregistrement et adressage.
Driver réseau : enregistrement, activation, socket buffer, statistiques d’utilisation.
Travaux pratiques : enregistrement d’un driver netdev miroir, gestion des statistiques.

Utilisation d’un bus

Le sous-système USB : principe, environnement USB Core.
Implémentation d’un driver USB : enregistrement, identifiants, endpoints, classes, URB.
Travaux pratiques : communication avec un bus USB, énumération, écriture et lecture vers un device USB.

Conclusion

Discussions libres sur l’ensemble des thèmes abordés.
Travaux pratiques : Expérimentations libres suivant les demandes des participants.

Téléchargez le programme de la formation au format PDF.


Organisation pédagogique

Il est possible de participer à ce cours en mode présentiel en nos locaux d’Évry (91) ou à distance. Notre salle de formation est équipée pour la visioconférence interactive, chaque stagiaire peut intervenir à tout moment oralement et en partage d’écran. Les machines de travaux pratiques sont pré-installées avec la distribution Ubuntu.

Les travaux pratiques ont lieu sur des PC Linux (accessibles à distance). Des démonstrations sont présentées avec des cartes à processeur ARM courantes (Raspberry Pi, BeagleBone…).

Intervenant : notre intervenant pour ce cours est Christophe BLAESS, auteur de plusieurs ouvrages sur le développement sous Linux et expert de Linux embarqué et temps réel.

Validation des acquis

La validation des acquis durant la session est estimée par auto-évaluation des stagiaires avant et après la session sur les thèmes abordés durant le cours.

Satisfaction

Un questionnaire d’évaluation est remis aux participantes et participants en fin de formation pour connaître leur taux de satisfaction sur différents critères, ainsi que leurs remarques et suggestions d’amélioration.

Le pourcentage de satisfaction pour cette formation en 2023 était de 98,3%.

Qualiopi

Nous sommes certifiés Qualiopi, ce qui peut permettre la prise en charge de votre formation par votre Opérateur de Compétences.

Logo Qualiopi

La certification qualité nous a été délivrée au titre de la catégorie d’actions suivante : actions de formation.

Certificat numéro B04664 valide jusqu’au 23/06/2025.

Après la formation

Vous pourrez continuer à accéder au support de cours et le cas échéant au dépôt Github des exemples.

Notre intervenant est disponible pour répondre par mail aux questions qui peuvent se poser suite à la formation.

Si vous souhaitez une assistance plus complète pour la mise en pratique dans votre domaine spécifique, nous pouvons vous proposer un contrat de support technique.

Support de formation « Écriture de drivers pour le kernel Linux »

Notre support de cours est disponible gratuitement sous licence Creative Common CC-by-SA.

Découvrez le déroulement typique des journées de formation.

Dates, devis, inscriptions

  • Durée de la session : 4 jours (28 heures).
  • Tarif : 2520 €HT / participant. Tarif dégressif si plusieurs inscriptions de la même société pour la même session.
  • Délai d’inscription minimal : 2 jours ouvrés.

Si vous voulez inscrire plusieurs participants ou si vous souhaitez une session personnalisée intra-entreprise, merci de nous contacter pour obtenir un devis correspondant à votre demande.

Pour vous inscrire à une prochaine session, remplissez le formulaire ci-dessous et nous vous enverrons un projet de convention de formation sous 24 heures. Votre inscription sera définitivement confirmée lorsque nous recevrons la convention contre-signée.

    Date session

    Entreprise


     

    Participant à la formation
      

    Responsable de l'inscription (si différent du participant)
      

    (*) champs obligatoires

    Mise à jour 01/08/2024