Logo de la rubrique Noyau Linux et développement de drivers

Noyau Linux et développement de drivers

Pour connaitre les prochaines sessions de formation en Logiciel embarque et programmation cliquez ici.



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

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

PUBLIC VISE

Concepteurs, techniciens et ingénieurs de développement et chefs de projets techniques qui souhaitent concevoir de futurs produits basés sur des cartes ARM sous linux

PREREQUIS

Maîtrise du langage C.
Maîtrise des commandes de base GNU/Linux.
Un PC avec webcam, haut-parleur et micro et une liaison Internet sont requis.

INTERVENANT

Expert spécialisé dans l’intégration de solutions Open Source. Il est également l’auteur d’ouvrages sur "Linux embarqué".
Le programme CAP’TRONIC aide, chaque année, 400 entreprises à monter en compétences sur les technologies liées aux systèmes électroniques et logiciel embarqué.

PRIX

Non-adhérent : 1 500€ HT
Adhérent CAP’TRONIC : 1 200€ HT

LIEU

Formation à distance : Les accès à un outil informatique en ligne adapté seront fournis au stagiaire avant le démarrage de la formation. Aucun logiciel spécifique n’est à installer. Seule une connexion à Internet est requise.

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)
o Table des identifiants (usb_device_id)
o Descripteur de pilote (struct usb_driver)
o Allocation et libération, fonctions probe et disconnect
o Ajout d’une interface en mode caractère (char driver), structureusb_class_driver
o 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)
o Initialisation
o Déclaration du nouveau disque
o 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

ORGANISATION

Moyens pédagogiques : Outil de visioconférence - Support de cours - Etude de cas – Démonstration et travaux pratiques Assistance pédagogique sur le cours assurée par le formateur pendant 1 mois à l’issue de la formation.

Moyens permettant d’apprécier les résultats de l’action : Evaluation de l’action de formation par l’envoi d’un questionnaire de satisfaction à chaud à l’issue de la formation, puis d’un questionnaire à froid quelques semaines après la formation.

Moyen permettant de suivre l’exécution de l’action : Evaluation des connaissances via un questionnaire avant et après la formation.

Sanction de la formation : Attestation d’assiduité

RENSEIGNEMENTS ET INSCRIPTION

Florence CAGNARD, cagnard@captronic.fr - 01 69 08 60 54
Pour toute question y compris les conditions d’accès pour les publics en situation de handicap.

Les inscriptions sont closes. Pour connaitre les prochaines sessions de formation en Logiciel embarque et programmation cliquez ici.

Informations mises à jour le 01/01/2021