École Privée d’Ingénierie du Niger — L’école du nouveau monde

✉ elearning@epiniger.edu.ne    🌐 epiniger.edu.ne

Unité d’enseignement : CYB · S6 · UE2 — Programmation systèmes

  • Programmation noyau

    Le noyau est la partie la plus privilégiée d’un système : il gère le processeur, la mémoire, les périphériques et fait respecter les droits d’accès. Comprendre son fonctionnement interne est indispensable pour développer des pilotes, mais aussi pour un spécialiste de la cybersécurité : durcissement du système, analyse des incidents, compréhension des mécanismes de protection (séparation noyau/utilisateur, signature des modules, netfilter) et des menaces qui visent ce niveau (rootkits noyau, pilotes vulnérables). Ce cours (UE2 — Programmation systèmes, semestre 6) présente l’architecture du noyau Linux, ses outils de développement et de débogage, ses mécanismes internes (threads, ordonnancement, mémoire, temps, synchronisation) puis l’écriture de pilotes caractère, le modèle de pilotes et sysfs, et enfin les sous-systèmes bloc, systèmes de fichiers, réseau et USB. Le programme cite les noyaux 3.x et 4.x ; les travaux pratiques utilisent une version LTS récente, les principes restant les mêmes et les différences d’API étant signalées.

    Objectifs d’apprentissage

    • Décrire l’architecture du noyau Linux, l’organisation de ses sources et son cycle de développement.
    • Configurer, compiler et installer un noyau ; écrire, compiler, charger et déboguer des modules.
    • Expliquer la gestion des threads, de l’ordonnancement, de la mémoire et du temps dans le noyau.
    • Écrire un pilote de périphérique en mode caractère sûr (synchronisation, copies utilisateur contrôlées).
    • Utiliser le modèle de pilotes (bus, device, driver, class, sysfs) et connaître les pilotes bloc, réseau et USB.
    • Appliquer les bonnes pratiques de sécurité du code noyau (vérifications, signature des modules).

    Prérequis

    Langage C (pointeurs, structures, allocation), administration Linux (LPI 101 à 202), architecture des ordinateurs, notions de systèmes d’exploitation (processus, mémoire virtuelle).

    Plan du cours

    1. Leçon 1 — Le noyau Linux : architecture, sources, compilation, modules et outils
    2. Leçon 2 — Threads noyau, ordonnancement, mémoire, temps et procfs
    3. Leçon 3 — Pilotes de périphériques en mode caractère et modèle de pilotes (sysfs)
    4. Leçon 4 — Périphériques bloc, systèmes de fichiers, réseau et USB

    Modalités d’évaluation

    Volume horaire : 20 h de CM, 10 h de TD, 20 h de TP, 50 h de travail personnel ; 4 crédits. Contrôle continu (50 % : comptes rendus des TP — compilation du noyau, modules, thread noyau, procfs, pilote caractère) et examen terminal écrit (50 %).

    Bibliographie

    • Jonathan Corbet, Alessandro Rubini et Greg Kroah-Hartman, Linux Device Drivers, 3e édition, O’Reilly.
    • Robert Love, Linux Kernel Development, Addison-Wesley.
    • Daniel P. Bovet et Marco Cesati, Understanding the Linux Kernel, O’Reilly.
    • Greg Kroah-Hartman, Linux Kernel in a Nutshell, O’Reilly.
    • Documentation officielle du noyau Linux, docs.kernel.org, et site kernel.org.