Accueil Formations Développements Documents Présentation Contact
Logiciels
• Netpipe
• IP-multiserv
Autres logiciels…
Articles
• Linux : histoire d'un noyau
• Lancer une application au démarrage de Linux
• Sécuriser l'accès à une station Linux
Autres articles…
Documents
• Aides-mémoire Unix & Linux
• Manuel Linux en français
Livres
• Programmation système en C sous Linux
• Langages de scripts sous Linux
Présentation
• Renseignements
• Contact
Programmation noyau et écriture de drivers sous Linux

Le support pour les périphériques est assuré sous Linux par des pilotes (drivers) dont le code se déroule dans le noyau du système d'exploitation. Il est donc nécessaire pour le développeur amené à écrire ou à tester des pilotes de périphériques de maîtriser les concepts propres à la programmation noyau.

Ce cours propose une approche originale, s'appuyant sur l'écriture progressive de pilotes 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 noyau.

Outre les périphériques classiques (caractère, bloc, réseau), on étudie certains sous-systèmes du noyau tels que les systèmes de fichiers ou l'ensemble USB.

Organisation

Durée : 4 jours.
Pré-requis : les participants doivent avoir une connaissance du système Unix/Linux (niveau utilisateur ou développeur) et une bonne familiarité avec le langage C.

Thèmes abordés

  • Programmer pour le noyau Linux : noyau Linux et modules, outils de développement, API et environnement de fonctionnement du noyau ;
  • Périphériques caractère : principes d'écriture d'un pilote de périphérique, appels-systèmes principaux, accès au matériel, traitement des interruptions, tasklet, workqueue ;
  • Driver avancé : attentes, asynchronisme, mémoire, classe de périphériques ;
  • Périphériques en mode bloc : principes, traitement des requêtes, partitionnement, ordonnancement des entrées-sorties ;
  • Systèmes de fichiers : principe du VFS, inscription d'un nouveau système de fichiers ;
  • Périphériques et protocoles réseau : interface réseau, entregistrement d'une nouvelle interface, étude de la pile IP ;
  • Périphériques USB : sous-système USB, enregistrement d'un driver Interrupt, études de drivers Bulk et Control ;

Plan détaillé

Première journée - Programmer pour le noyau Linux

1ère séquence 9h00-10h30

Noyau Linux et modules :
Historique du noyau Linux, licence GPL, développement du noyau
Appels-système, modules.

Travaux pratiques :
Observation des appels-système invoqués par des applications et commandes utilisateur.
Manipulation des modules précompilés.

2ème séquence 10h45-12h15

Outils de développement noyau :
Organisation des sources, compilation du noyau et des modules.
Programmation de modules du noyau, compilation de modules indépendants.
Messages du noyau, dépendances entre modules.

Travaux pratiques :
Compilation et installation d'un noyau 2.6.
Application de patches pour débogage noyau.
Écriture de modules simples du noyau.
Intégration dans la chaîne de compilation du noyau.
Passage de paramètres au boot.

Pause déjeuner

3ème séquence 13h30-15h15

Interface de programmation du noyau :
Chaînes de caractères, blocs mémoire, fonctions numériques et conversions.
Pilotes de périphériques.
Éléments temporels et actions différées.
Préemptibilité du noyau 2.6.

Travaux pratiques :
Ecriture d'un module d'horodatage.
Chronométrer les phases de boot.

4ème séquence 15h30-17h00

Environnement du noyau :
Tâches et processus "current".
Espaces d'adressage.
Dialogue avec /proc.

Travaux pratiques :
Ecriture d'un module d'information sur les structures internes des processus.
Ecriture d'un module d'horodatage via /proc.

Deuxième journée - Ecriture d'un driver

1ère séquence 9h00-10h30

Ecriture d'un pilote de périphérique :
Principe des pilotes de périphérique.
Réservation de numéros majeurs et mineurs.
Enregistrement du pilote de périphérique.
Fonctions de lecture et écriture.
Fonctions de paramétrage.
Synchronisation des appels-système.

Travaux pratiques :
Manipulation des fichiers spéciaux.
Réservation de numéro majeur.
Enregistrement de périphérique.
Ecriture d'un driver simple.
Implémentation des routines de lecture et écriture.

2ème séquence 10h45-12h15

Accès au matériel et interruptions :
Accès simple au matériel.
Contextes d'exécution : appel-système et interruption.
Gestion des interruptions.
Différer un traitement en interruption : tasklet & workqueue.
Protection des variables globales.

Travaux pratiques :
Ecriture d'un gestionnaire d'interruption.

Pause déjeuner

3ème séquence 13h30-15h15

Fonctions avancées d'un pilote de périphérique :
Attentes d'événements.
Multiplexage d'entrées-sorties.
Gestion de la mémoire.

Travaux pratiques :
Création d'un périphérique "file de messages" virtuel.

4ème séquence 15h30-17h00

Modèle de périphérique du noyau 2.6 :
Création d'une classe de périphérique.

DMA :
Transferts de données par DMA.

Troisième journée - Périphériques bloc et systèmes de fichiers

1ère séquence 9h00-10h30

Périphériques en mode bloc :
Principe des périphériques bloc.
Ecriture d'un driver.
Enregistrement du pilote.
Déclaration d'un disque générique.
Initialisation de la file de requêtes.
Requêtes sur un driver bloc.

2ème séquence 10h45-12h15

Driver bloc avancé :
Traitement différé.
Partitionnement du disque.
Sous-système Block du noyau.
Ordonnanceur des entrées-sorties

Travaux pratiques :
Ecriture progressive d'un pilote de disque virtuel, en s'appuyant sur les exemples fournis dans le cours

Pause déjeuner

3ème séquence 13h30-15h15

Virtual File System :
Organisation du VFS
Structures File, Dentry, Inode, et Super-bloc.

4ème séquence 15h30-17h00

Nouveau système de fichiers :
Enregistrement.
Initialisation du super-bloc.
Implémentation des appels-système de lecture et écriture.
Utilisation du cache en lecture et en écriture.
Communication avec le sous-sytème Block.

Travaux pratiques :
Ecriture d'un système de fichiers virtuel, simple en analysant les étapes de transfert des données.

Quatrième journée - Autres types de périphériques

1ère séquence 9h00-10h30

Périphériques réseau : . Dépendance des interfaces bas-niveau et des protocoles réseau.
Périphérique net_device
Enregistrement d'une interface, activation, emission et réception de paquets.
Statistiques d'utilisation d'interface

Travaux pratiques :
Ecriture progressive d'un driver pour périphérique virtuel permettant l'utilisation du protocole IPv4.

2ème séquence 10h45-12h15

Protocoles réseau : . Principes de la pile IP.
Emission et réception de données.
Communications avec l'interface bas-niveau.

Travaux pratiques :
Examen du trajet des données au sein de la pile IPv4 lors de réception et d'émission de données avec le protocole TCP/IP.

Pause déjeuner

3ème séquence 13h30-15h15

Périphériques USB :
Organisation du sous-système USB de Linux.

Implémentation d'un driver de classe Interrupt :
Enregistrement d'un driver.
Endpoints et types de dialogues.
Communication avec les URB.
Traitements des écritures successives rapides.
Déconnexions intempestives et accès concurrents.
Gestion simultanée de plusieurs périphériques.

Travaux pratiques :
Ecriture d'un driver pour carte d'entrée-sortie Velleman K8055.

4ème séquence 15h30-17h00

Autres classes USB :
Exemples de drivers pour les modes Bulk, Control et Isochrones.

Conclusion :
Discussions libres sur l'ensemble des thèmes abordés.

Travaux pratiques :
Expérimentations libres suivant les demandes des participants.

Accueil | Contact | Mentions légales

Conception : Logilin - Formations Linux