Aperçu du cours
Objectif de formation : L’apprenant saura maîtriser le développement de drivers robustes et adaptés aux différentes distributions de Linux
Prérequis
- Bases solides sur Linux/Unix
- Compétences en programmation C
Objectifs pédagogiques
- Gérer le développement de pilotes de périphériques
- Appréhender en détail les mécanismes internes du noyau
- Développer et incorporer de nouveaux éléments dans le noyau Linux
- Ecrire un pilote périphérique en mode caractère ou bloc
Public ciblé
- Développeurs Linux/Unix
Programme de formation
-
Introduction au noyau
-
Tour d’horizon du système et du rôle du noyau
-
Présentation des 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 & appels système
-
Organisation des sources
-
Présentation du principe de compilation du noyau et des modules
-
Dépendances & symboles
-
Exportations de symboles
-
Chargement du noyau
-
Travaux pratiques : Compilation et installation d’un noyau 3.x.
-
-
Présentation des outils utilisables
-
Outils de développement
-
Outils de débogage
-
Environnement de débogage
-
Outil de gestion de version
-
Traçage des appels système
-
Travaux pratiques : installation de l’ensemble des outils et des sources pour la conception d’un module. Paramétrage vers le chargement automatique de module au boot. Déploiement et test de modules simples
-
-
Gestion des threads & scheduling
-
Tour d’horizon des types de périphériques
-
Fonctionnement du noyau & protection des variables globales
-
Représentation des threads
-
Contexte d’exécution
-
Scheduler de Linux et la préemption
-
Création d’un thread noyau
-
Travaux pratiques : conception d’un module de création de thread noyau lors de l’insertion et déchargement 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
-
Gestion et organisation mémoire pour les architectures UMA et NUMA
-
Espace d’adressage utilisateur et noyau
-
Gestion de pages à la demande
-
Allocations mémoire, buddy allocator, kmalloc, slabs et pools mémoire
-
Gestion des accès à la mémoire
-
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
-
Synchronisations & attentes dans le noyau
-
Ticks & Jiffies dans Linux
-
Horloge temps réel, RTC (real Time Clock), implémentation des timers
-
Interface timers haute résolution & estampilles
-
Outils spécifiques au noyau, listes chaînées, kfifo et container_of
-
Interface noyau avec /proc par le procfs
-
Travaux pratiques : Usage 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
-
Conception de pilotes de périphériques caractère
-
Virtual File System
-
Méthodes associées aux périphériques caractères
-
Gestion des interruptions DMA & accès au matériel
-
Enregistrement des pilotes de périphériques de type caractère et optimisations
-
Travaux pratiques : rédaction 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
-
Introduction au framework
-
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
-
Présentation de l’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 & écriture d’un driver en mode isochrone
-