Présentation du noyau
- Vue d'ensemble du système et rôle du noyau.
- Les sites de référence.
- 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. Ecriture et test de modules simples.
Gestion des threads, scheduling
- Représentation des threads (structure task_struct, thread_info, ...).
- Les threads, contexte d'exécution.
- Les ordonnanceurs de Linux et la préemption.
- Création d'un thread noyau (kthread_create, wakeup_process, ...).
- Travaux pratiques
Créer un module qui créé 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.
- Allocations mémoire, buddy allocator, kmalloc, slabs et pools mémoire.
- La gestion des accès à la mémoire (les caches et la MMU).
- La gestion de pages à la demande (demand paging), copy-on-write, allocations lazy.
- Les problèmes liés à la sur-réservation de la mémoire (OOM killer).
- Gestion de la mémoire sur x86 et ARM, utilisation des Hugepages.
- Synchronisations et attentes dans le noyau, spinlocks, waitqueues, mutex et les completions.
- L'horloge temps réel, RTC (real Time Clock), implémentation des timers, les jiffies.
- 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. Gestion mémoire par le procfs.
- Travaux pratiques
Utilisation des timers et des estampilles. Implémentation d'un accès au procfs. Mise en oeuvre 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, du DMA et des 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.
Enregistrement d'une interuption partagée.
Linux Driver Framework - sysfs
- Présentation du framework, kobject, kset et kref. Interaction avec le sysfs (/sys).
- 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 fichier
- 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 block 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.
Autres Drivers
- Principe des périphériques USB. Interface avec le module USB-core.
- Construction d'un URB (USB Request Block).
- Les gadgets USB.
- Les drivers audio
- Les drivers vidéo, Linux Frame Buffer
- les drivers d'entrée, drivers input.
- Travaux pratiques
Driver pour périphérique d'entrée (input)
|