Cette formation à l’écriture de drivers pour Linux vous permettra de maîtriser les rouages de la programmation de pilotes pour Linux.
Au cours de cette formation, vous apprendrez :
- à développer des modules noyau,
- à manipuler les appels-système,
- à gérer la mémoire et les interruptions,
- à intégrer des drivers pour différentes catégories de périphériques (carte réseau, bus USB, etc.) et
- à construire un driver USB en parcourant l’ensemble du cycle de vie de l’implémentation.
Cette formation est destinée aux professionnel·le·s souhaitant développer des pilotes fiables et optimisés sur Linux.
Pour préparer au mieux cette formation, vous pouvez consulter :
- notre formation Administration Système Linux pour la maîtrise de Linux en tant qu’utilisateur et
- notre formation Langage C qui sera utile pour aborder sereinement les aspects bas niveau du noyau.
Les objectifs
- Maîtriser les concepts et techniques de la programmation noyau sous Linux
- Analyser et intégrer des drivers pour différents types de périphériques
- Concevoir et optimiser des drivers performants et robustes
Pré-requis
- Connaissances utilisateur de Linux (installation, manipulation de base)
- Notions en langage C (syntaxe, compilation)
- Ordinateur portable à apporter
Le programme de la formation Écriture de drivers Linux
Jour 1 : Fondamentaux du noyau Linux et écriture de module
-
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 et dépendances
-
Les appels-système de Linux
- Appels-système
- principe et 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
Mises en pratique :
- manipulation de modules précompilés, écriture, compilation et test d’un module, tests de modules avec dépendances
- appels-système invoqués par une application, échange de données entre espace utilisateur et kernel
Jour 2 : Exploration de l’API interne du noyau et pilotes en mode caractères
-
API interne du kernel
- Fonctions habituelles de libC
- chaînes, mémoire et fonctions mathématiques
- Mise au point et débogage
- Élements temporels
- ticks, mesure du temps, attentes et actions différées
- Gestion mémoire
- allocation et gestion des pages
-
Driver en mode caractères
- Enregistrement d’un driver
- principe, numéros, modèle de drivers et classes
- Méthodes d’un driver
- open(), close(), read(), write(), ioctl()
- Synchronisation entre appels-système
- nécessité d’une synchronisation
- mutex
Mises en pratique :
- 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
- numéros majeur-mineur, appel des méthodes du driver, classe personnalisée, écriture d’un driver simple, implémentation d’un ioctl()
Jour 3 : Accès au matériel, interruptions et drivers réseau
-
Accès au matériel
- Entrées-sorties
- ports dédiés, mapping en adresses virtuelles, GPIO et bus PCIe
- Interruptions
- contexte d’interruption et handlers
- activation et désactivation
- routine de service
- Traitement différé
- tasklet, workqueue et threaded interrupt
- Synchronisation et attente d’événement
- spinlock() et wait_queue
- méthodes bloquantes et non-bloquantes
- Projection mémoire
-
Driver réseau
- Périphérique réseau
- interfaces, protocoles, enregistrement et adressage
- Driver réseau
- enregistrement, activation, socket buffer, statistiques d’utilisation
Mises en pratique :
- 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()
- enregistrement d’un driver netdev miroir, gestion des statistiques
Jour 4 : Drivers USB
-
Utilisation d’un bus
- Le sous-système USB
- principe
- environnement USB Core
- Implémentation d’un driver USB
- enregistrement, identifiants, endpoints, classes, URB
- Discussions libres sur l’ensemble des thèmes abordés
Mises en pratique :
- communication avec un bus USB, énumération, écriture et lecture vers un device USB
- Expérimentations libres suivant les demandes des participants
Télécharger le programme
Le(s) formateur(s)
Christophe BLAESS
Ingénieur Linux industriel depuis plus de 20 ans, Christophe est intéressé par les aspects bas niveau de Linux (embarqué, temps réel, drivers, etc.) et est attaché aux logiciels libres en général.
Il est l'auteur de plusieurs livres sur Linux (Développement système sous Linux, Écriture de scripts shell sous Linux, Solutions temps réel sous Linux…). Christophe aime partager ses connaissances avec ses pairs et est aussi le créateur de nombreux projets libres sur Github.
Au-delà de ses activités d'ingénierie (développement, mise au point de systèmes embarqués, conseil et assistance technique) et de formation, Christophe organise régulièrement différentes manifestations sur Linux embarqué (Paris embedded meetup et Live embedded event notamment).
Voir son profil détaillé
FAQ
Nos formations sont éligibles à plusieurs dispositifs de financement, selon votre situation. Human Coders est certifié
Qualiopi, ce qui permet la prise en charge par des organismes comme
Pôle emploi, votre OPCO ou encore le
CPF (Compte Personnel de Formation) pour certaines formations.
Pour en savoir plus, veuillez consulter notre page : Comment financer votre formation ?
Oui, la formation peut être proposée en présentiel ou en distanciel. Pour les inter-entreprises, les modalités (présentiel ou à distance) sont fonction de la session.
Nous pouvons organiser des sessions à d'autres dates ou dans d'autres villes (Bordeaux, Lille, Lyon, Marseille, Montpellier, Nantes, Nice, Paris, Strasbourg, Toulouse...)
Les formations se déroulent toujours en petit groupe de 3 à 6 stagiaires. Nous souhaitons que les formateurs et formatrices puissent passer un maximum de temps avec chacun·e.
Voici une journée type :
- 9h : vous êtes accueillis par votre formateur·rice autour d'un petit déjeuner (croissants, pains au chocolat, jus de fruit, thé ou café...)
- 9h30 : la formation commence
- 12h30 : pause de midi. Le·a formateur·rice mangera avec vous. C'est l'occasion d'avoir des discussions plus informelles.
- 14h : reprise de la formation
- 18h : fin de la journée
8 raisons de participer à une formation Human Coders
- Satisfaction client élevée : Un taux de statisfaction de 4,6/5 depuis 2012 (sur 1646 sessions réalisées). 99% des participants se disent satisfaits de nos formations
- Approche pédagogique unique : Des formations en petit groupe, des formateurs passionnés et expérimentés, de véritables workshops... (Plus d'infos sur notre manifeste)
- Catalogue de formations complet : 170 formations au catalogue, de quoi vous accompagner sur tout vos projets
- Écosystème dynamique : Nous accompagnons les dev depuis 13 ans avec des initiatives comme Human Coders News, les Human Talks, le podcast ou encore notre serveur Discord
- Financement facilité : Organisme certifié Qualiopi, indispensable pour que vous puissiez obtenir des aides au financement via votre OPCO
- Références clients prestigieuses : De nombreux clients qui nous font confiance depuis des années
- Accompagnement sur mesure : Nous vous proposons un accompagnement personnalisé par nos consultants pour vous aider dans vos projets au-delà de la formation
- Valorisation professionnelle : Remise d'un diplôme, d'une attestation et d'une certification, suivant les formations effectuées, que vous pourrez afficher sur vos CV et réseaux sociaux