Open Source School Executive Education

Noyau linux et developpement de drivers

Par Open Source School Executive Education

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

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 Platform

  • Introduction générale à la séparation Device/Driver
  • Le bus virtuel Platform
  • Modules driver
  • Modules devices
  • Configuration d'une carte électronique
  • Le "devices tree"
  • Les "overlays"

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_

Formations de la même catégories (5)

Dawan
Linux Administration + Préparation LPI 102Par Dawan

Comprendre les principes de l'OpenSource et Linux - Savoir installer une distribution Linux - Connaître les bases de l'utilisation de Linux - Passer l'examen LPI 102

Orsys
Linux industriel, temps réel et embarquéPar Orsys

Vous découvrirez dans cette formation l'architecture générale d'un système embarqué et mettrez en œuvre les outils de développement industriel disponibles librement sous Linux. Vous implémenterez les mécanismes d'ordonnancement temps partagé et réel souple, vous accéderez au développement temps réel strict avec l'extension LinuxRT ou Xenomai. Vous verrez enfin comment personnaliser le boot d'un système Linux.

Tanit Formation
Administrer un système linux - niveau 1Par Tanit Formation

La formation est basée sur la distribution Linux RedHat. Elle vous garantira l’assurance de gérer avec succès toutes les tâches liées àl’adminitsration d’un système d’exploitation.

Dawan
Linux Avancé : Serveur d'entreprises avec Samba/LDAP/Netfilter/SquidPar Dawan

Savoir installer, configurer et maintenir un serveur de fichier/d'authentification/routeur/firewall pour une entreprise

Openska
C avancé : programmation système sous LinuxPar Openska

Conçu pour la programmation système, le langage de programmation impératif C est l’un des langages les plus utilisés. Le langage C est dit compilé, c’est-à-dire décrit par un fichier source. Quant à Linux, système d’exploitation libre, c’est une implémentation libre du système UNIX très sollicitée par les professionnels.

Openska vous propose la formation C avancé : programmation système sous Linux sur 5 jours afin de vous permettre de maîtriser les concepts de programmations les plus complexes à l’aide du langage C. À terme, vous serez capable de développer des applications à l’aide du langage C. Du rappel des bases à la gestion des threads Linux en passant par la gestion du réseau et de la mémoire, vous acquerrez l’ensemble des connaissances et compétences nécessaires à la maîtrise des concepts avancés du langage de programmation C. Vous obtiendrez également une vue d’ensemble des principales bibliothèques existantes et de leurs modes d’utilisation, et ce, pour optimiser votre gestion du temps.