|
|
|
|
 |
Contrôle des périphériques |
|
 |
fonction ioctl |
|
 |
choix des codes de commandes |
| Exercice : |
Modification des paramètres du périphérique à travers un IOCTL |
| Entrées sorties synchrones et asynchrones |
 |
Synchronisation des tâches |
|
 |
files d'attente |
|
 |
mise en attente/réveil d'une tâche |
|
 |
attente exclusive |
|
 |
attente sur un bit (nouveau en 2.6) |
|
 |
évènement de complétion |
|
 |
Entrées/sorties synchrones |
| Exercice : |
Ecriture des fonctions de lecture/écriture synchrones |
|
 |
Entrées/sorties asynchrones |
|
 |
requêtes non bloquantes |
|
 |
asynchrone multiplexé (select et poll) |
|
 |
asynchrone notifié (signal SIGIO) |
|
 |
asynchrone vrai (totalement parallèle) |
| Exercice : |
Ajout des fonctions de gestion des E/S asynchrones |
| 4ème jour |
| Accès au matériel et interruptions |
 |
Accès aux registres des périphériques |
|
 |
Espace d'IO et espace de mémoire physique |
|
 |
réservation et utilisation des ports d'IO (espace d'IO) |
|
 |
réservation et utilisation des plages d'IO en espace physique |
|
 |
mapping des registres dans un pilote |
|
 |
problèmes d'optimisation (cache, out-of-order, volatile) |
| Exercice : |
Ecriture d'un pilote d'entrées/sorties parallèles (GPIO) |
|
 |
Direct Memory Access (DMA) |
|
 |
Slave DMA (ISA) |
|
 |
DMA Bus Master (PCI) |
|
 |
mapping d'un buffer noyau dans l'espace du périphérique |
|
 |
intérêts des mappings permanent ("coherent mapping") et temporaire ("streaming DMA") |
|
 |
Spécificités des interfaces PCI |
|
 |
énumération |
|
 |
espace de configuration |
|
 |
association dynamique pilote/périphérique (hotplug) |
|
 |
Interruptions |
|
 |
Problèmes spécifique aux Multi-coaurs (SMP) |
|
 |
IRQ, ISR, "top half" et "bottom halves" (softirq, tasklet, work_queue) |
|
 |
contexte d'exécution des gestionnaires d'interruption (atomique) |
|
 |
partage d'interruptions |
|
 |
affetation d'interruptions à des processeurs |
|
 |
synchronisation entre code noyau, "top half" et "bottom halves" |
|
 |
fonctions atomiques |
| Exercice : |
Ajout d'un mécanisme d'attente de changement d'état de la GPIO sur interruption |
| Pilotes bloc |
 |
structures |
|
 |
représentation d'un disque (struct gendisk) |
|
 |
file des requêtes (struct request queue) |
|
 |
interface |
|
 |
chargement/déchargement (open/release) |
|
 |
gestion des media amovibles |
|
 |
contrôle (ioctl). Ioctl de description de la géométrie du disque |
|
 |
routine de stratégie |
|
 |
relation entre lecture/écriture et routine de stratégie |
|
 |
algorithmes d'ordonnancement des requêtes ("elevators") |
|
 |
structures décrivant les requêtes (struct bio et bio_vec) |
| Exercice : |
Analyse d'un pilote de Ramdisk |
| Pilotes réseaux |
 |
structures |
|
 |
représentation d'une interface réseau (struct net_device) |
|
 |
paquet réseau (struct sk_buff) |
|
 |
Cas du "scatter/gather" |
 |
interface |
|
 |
réception de paquet |
|
 |
envoi de paquet |
|
 |
gestion des paquets perdus |
|
 |
statistiques de l'interface |
|
 |
Nouvelles API réseau (NAPI, nouveau en 2.6) |
|
 |
"interrupt mitigation" (suppression des IRQ inutiles) |
|
 |
"paquet throttling" (désengorgement des couches protocolaires) |
| Pilotes USB |
 |
La norme USB |
|
 |
notion de configuration |
|
 |
notion d'interface (rôle d'un périphérique) |
|
 |
notion de terminaison (canal de communication) |
|
 |
types des terminaisons (contrôle, interruption, bloc, isochrone) |
|
 |
Drivers USB host |
|
 |
requêtes synchrones (directes) |
| Exercice : |
Examen d'un pilote USB host |