Formation Noyau linux et développement de drivers

Ref :

Embarqué & IoT Durée :
4 jours
Lieu :
Paris - Grenoble - Toulouse - Nantes

Tarif

Intra :
Inter :
2190€ HT / personne
Inscrivez-vous

Demande d'informations

Les prochaines dates

Du : 09 avril 2018 Au : 12 avril 2018

Du : 28 mai 2018 Au : 31 mai 2018

Pré-requis

  • Connaissance utilisateur Linux ou à défaut UNIX
  • Notions de langage C
  • Notions de manipulation de la ligne de commande (shell)

Public concerné

  • Ingénieurs de développement embarqué et chefs de projets techniques.
  • Responsables de la fourniture de BSP

Objectifs

Cette formation va permettre à des ingénieurs de développement maîtrisant la programmation en C de concevoir, développer et déployer un pilote de périphérique pour le noyau Linux.

Programme détaillé

Introduction au noyau Linux

  • Principes, espaces utilisateur et noyau

  • Historique

  • Principaux concepts

  • Nommage des versions

  • Licences

  • Compilation native et croisée d'un noyau standard

 

Modules Linux

  • Développement en espace noyau

  • API des modules Linux, écriture d'un module « Hello World »

  • Les fonctions module_init() et module_exit()

  • Manipulation des modules avec insmod, modprobe, rmmod, lsmod, modinfo

  • Macros d'identification des modules (MODULE_LICENSE, etc.)

  • Dépendances des modules

  • Passage de paramètres

 

Pilotes en mode caractère

  • Rappel sur les pilotes UNIX

  • Pilote statique et dynamique

  • Les différents types de pilotes (char, block, network)

  • Structure d'un pilote en mode caractère (char)

  • Principales fonctions du pilote →open(), release(), read(), write(), ioctl(), …

  • Interface avec l'espace utilisateur (majeur et mineur) différentes méthodes d'allocation

  • La structure file_operations

  • Les classes de pilotes, utilisation de la classe misc, création de classe

  • Échanges de données avec l'espace utilisateur →copy_from_user(), copy_to_user()

  • Traitement des interruptions (top-half, bottom-half, wait queue)

  • Threads noyau

  • Ports et mémoire d'entrée sortie (request et release)

  • Projection en mémoire, utilisation de mmap()

  • Verrouillage (spinlock et mutex)

  • Mesure du temps et compteurs

 

Bus PCI

  • Introduction générale au bus PCI (historique, versions, performances)

  • Ressources d'un périphérique PCI (Base Address Register, interruptions)

  • Registres de configuration

  • Le bus PCI sous Linux

  • Utilisation de lspci

  • Écriture d'un pilote PCI générique

  • Table des identifiants (pci_device_id)

  • Descripteur de pilote (struct pci_driver)

  • Allocation et libération, fonctions probe() et remove()

  • Ajout d'une interface en mode caractère (char driver)

  • Test du pilote sur la carte réseau du PC virtuel

 

Bus USB

  • Introduction générale au bus USB (historique, versions)

  • Contrôleur (OHCI, EHCI) et connectique

  • Principe de fonctionnement host et device

  • Structure du périphérique →device,configuration(s),interface(s),endpoint(s)

  • Les messages USB → CONTROL, INTERRUPT, BULK, ISOCHRONOUS

  • Le bus USB sous Linux

  • Utilisation de lsusb

  • Écriture d'un pilote USB pour un périphérique simple de type HID (Human Interface Device)

    • Table des identifiants (usb_device_id)

    • Descripteur de pilote (struct usb_driver)

    • Allocation et libération, fonctions probe() et disconnect()

    • Ajout d'une interface en mode caractère (char driver), structureusb_class_driver

    • Test du pilote sur la carte réseau du PC virtuel (tablette virtuelle) et sur un périphérique réel (Big Red Button)

  • Utilisation de UDEV, gestion de l'attachement et du détachement d'un périphérique HID

  • Cas général d'URB (USB Request Block)

  • Mise au point avec USBMON

  • Écriture de « pilote » USB en espace utilisateur, introduction à hidraw et libusb

 

Interfaces/bus divers (GPIO, I2C, SPI)

  • Interfaces de la carte Raspberry Pi

  • GPIO sous Linux en espace utilisateur et noyau (génération d'une interruption)

  • Bus I2C et SPI sous Linux (afficheur 7 segments et capteur de luminosité)

 

Introduction aux pilotes réseau

  • Rappels sur le réseau sous Linux

  • Spécificité des pilotes réseau, positionnement par rapport à la pile et au bus (PCI, USB, ...)

  • Les fonctions d'un pilote réseau →open(),stop(), start_xmit(), …

  • Les structures net_device et net_device_ops

  • Manipulation du socket buffer (struct sk_buff)

  • Écriture d'un pilote réseau minimal faketh, création de l'interface fake0

  • Test du pilote avec l'outil tcpdump

  • Pilotes réseau PCI et USB, introduction à USBnet

  • Introduction à la NAPI

 

Introduction aux pilotes en mode bloc

  • Architecture d'un pilote en mode bloc (block driver), notion degendisk

  • Développement d'un pilote de disque mémoire (ramdisk) → SBD (Simple Block Device)

    • Initialisation

    • Déclaration du nouveau disque

    • Gestion des requêtes

  • Test du pilote → partitionnement, formatage, lecture et écriture de données

 

Mise au point en espace noyau

  • Mise au point etprofilingsous Linux

  • Introduction à GDB

  • Exemple de l'agent GDB SERVER (espace utilisateur)

  • Agents pour la mise au point noyau

  • Sonde JTAG

  • Émulateur QEMU

  • KGDB

  • Mise au point du noyau statique (analyse de kernel panic)

  • Mise au point d'un module dynamique (.ko)

  • Introduction à Ftrace (profiling noyau)

  • Utilisation de trace-cmd et kernel shark

 

Les travaux pratiques pourront être adaptés au contexte client pour les formations intra-entreprises

Modalités pédagogiques

Méthode essentiellement active basée sur la mise en œuvre de travaux pratiques sur PC.

Les apports théoriques et méthodologiques viennent éclairer la pratique et favorisent la prise de recul.

Les apprenants sont encadrés par un formateur qui soumet un exercice, le corrigé se fait ensuite en groupe. Plusieurs exercices pratiques permettront aux participants de maîtriser opérationnellement l’outil.

Un diaporama est projeté aux participants durant la formation. Il présentera la trame et les contenus de la formation (plan, supports visuels et exercices), et des liens vers les chapitres des documentations officielles utiles à la réalisation des exercices.

Nos Actualités