...

Formation Ecriture de drivers et programmation noyau 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.


Objectifs
  • Maîtriser les concepts fondamentaux liés à la programmation pour le noyau Linux
Participants
  • Toute personne intéressée par le développement systèmes temps réel sur Linux
Approche Pédagogique
  • Cas pratiques
  • Remise d’outils
  • Echanges d’expériences
  • Durée : 3 jours
  • Réf. : EDPL

Dates de Formations

16 au 18 Janv. 2019

27 au 29 Mars 2019

15 au 17 Mai 2019

24 au 26 Juil. 2019

11 au 13 Sept. 2019

13 au 15 Nov. 2019

Programme
  • 1/ Noyau Linux et modules
    • • Les modèles et versions
    • • Licence GPL
    • • Développement du noyau
    • • Détecter des appels-système invoqués par des applications et commandes utilisateur
    • • Utilisation de modules précompilés
  • 2/ Outils de développement noyau
    • • Ecriture de code source
    • • Compilation et installation d'un noyau
    • • Ecriture de modules simples
    • • Intégration dans le noyau
    • • Paramètres au boot
    • • Cross-compilation sur Raspberry Pi
  • 3/ Les API du noyau
    • • Les chaînes et blocs mémoire
    • • Les fonction numériques et conversions
    • • Les éléments temporels et actions différées
    • • La préemptibilité du noyau
    • • Ecriture d'un module d'horodatage
    • • Chronométrage des phases de boot
    • • Mesure de précision d'horloge
    • • Mesure de durée d'un appel-système
  • 4/ L'environnement du noyau
    • • Les tâches et processus courants
    • • Les espaces d'adressage
    • • Le dialogue avec /proc
    • • Ecriture d'un module d'information sur les structures internes des processus
    • • Ecriture d'un module d'horodatage via /proc
    • • Tests sur Raspberry Pi
  • 5/ Ecriture d'un pilote de périphérique
    • • Le principe
    • • Les numéros majeurs et mineurs
    • • Les classes de périphériques
    • • La manipulation des fichiers spéciaux
    • • La réservation de numéro majeur
    • • L'enregistrement du driver
    • • Les fonctions de lecture et écriture
    • • Ecriture d'un driver simple
  • 6/ La gestion des appels-système et des entrées/sorties (I/O)
    • • Le paramétrage par ioctl
    • • La synchronisation d'appels-système par mutex
    • • L'accès matériel
    • • Les ports d'entrées-sorties
    • • GPIO sur carte embarquée
    • • Ecriture d'un driver d'entrées-sorties sur GPIO du Raspberry Pi
  • 7/ La gestion d'interruptions
    • • Les contextes d'exécution
    • • L'installation d'un handler
    • • Le traitement différé (tasklet, workqueue et thread interrupt)
    • • Ecriture d'un gestionnaire sur interruption clavier PC et sur GPIO du Raspberry Pi
    • • Visualisation des threadeds interrupts
  • 8/ Les interactions entre appels-système et interruptions
    • • La protection des variables globales (spinlock)
    • • L'attente d'événements (waitqueue)
    • • Les appels-système bloquants
    • • L'influence des priorités temps-réel sur les threads d'interruption
    • • La mesure de temps de latence des interruptions du Raspberry Pi
  • 9/ Entrées-sorties avancées
    • • Le multiplexage d'entrée-sorties (select et poll)
    • • Les principes des transferts de données par DMA
    • • Création d'un périphérique « file de messages » virtuel implémentant plusieurs appels-système
    • • Implémentation de select sur des entrées GPIO.
  • 10/ La gestion de la mémoire
    • • Allocation et libération de mémoire (kmalloc, vmalloc, get_free_pages, kmem_cache)
    • • Les projections (mmap)
    • • Expériences sur la projection mémoire en espace utilisateur, allocations mémoire maximales
  • 11/ Les périphériques blocs et VFS
    • • Les principes
    • • L'enregistrement
    • • Le disque générique
    • • La file de requêtes
    • • Le partitionnement
    • • Le sous-système Block
    • • i/o scheduler
    • • Virtual File System
    • • Ecriture d'un driver de disque virtuel : Partitionnement, formatage et montage de disque virtuel observation des effets des caches-disques du VFS
  • 12/ Périphériques PCI Express
    • • Le principe
    • • La détection et l'enregistrement de driver
    • • Base Address Registers
    • • Les interruptions classiques et MSI
    • • Etude d'un driver PCIe de pilotage d'une carte à FPGA
  • 13/ Les périphériques réseau
    • • Les interfaces de bas-niveau et protocoles réseau
    • • Le périphérique net_device, l'enregistrement, l'activation, l'émission et la réception de paquets
    • • Ecriture progressive d'un driver pour périphérique virtuel permettant l'utilisation du protocole IPv4
  • 14/ Les communications réseau
    • • Les statistiques d'utilisation d'interface
    • • Les principes de la pile IP
    • • Les communications entre protocoles et interface bas-niveau
    • • Le 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
  • 15/ Les périphériques USB
    • • L'organisation du sous-système USB de Linux
    • • Implémentation d'un driver Interrupt
    • • La communication avec les URB
  • 16/ Les aspects avancés
    • • Les écritures successives rapides
    • • Les déconnexions intempestives
    • • Les accès concurrents
    • • Des exemples de drivers Bulk, Control et Isochrones