Etude du fonctionnement interne du noyau Linux 3.x. Etude de la gestion des threads, ordonnancement, synchronisations, mutex, RCU. Différents aspects de la gestion de la mémoire, allocations, réservation, initialisation du noyau. Le temps, timers et timeout. Les bibliothèques, fifo, linked list. Etude de l'écriture de drivers, du LINUX DRIVER FRAMEWORK, du hotplug, des modules et de la gestion d'interruption. Développement de drivers caractère, block et input. Etude des drivers réseau, des systèmes de fichier.

Objectifs

Cette formation permet de passer en revue l'ensemble des outils disponible dans le noyau Linux pour écrire un driver Linux et d'apprendre à connaître les différents outils utiles pour la mise en oeuvre et le deboggage du noyau et des pilotes de périphériques.
Sont abordées les themes suivants:

  • caractéristiques et architectures du systèmes Linux. le chargement, le BSP, l'initialisation du noyau
  • la gestion mémoire
  • la gestion des threads utilisateurs et noyau, le scheduler
  • la gestion des périphériques
  • les mécanismes de synchronisation, barrières, spinlocks, sémaphores, mutex
  • les files systèmes, le VFS
  • configuration du noyau
  • Linux driver framework
  • Gestion mémoire, DMA, synchronisation ...

Matériel

Les travaux pratiques du stage Linux embarqué sont réalisés sur:

  • Ordinateur portable ou station de travail sous Debian (RedHat ou Fedora sur demande(*)).

(*) Attention ces modifications peuvent entrainer une modification des themes abordés.

Participants

Cette formation est adaptée aux techniciens et ingénieurs, désirant perfectionner leurs connaissances de Linux en vue de développer des pilotes de périphérique.

Pré-requis

Au minimum: Bonnes connaissance des systèmes d'exploitation.
De préférence: Bonnes connaissance des systèmes d'exploitation et de la programmation en C.

Programme

Présentation du noyau

  • Vue d'ensemble du système et rôle du noyau.
  • Les sites de référence.
  • Cycles de développement du noyau, les patchs.
  • Mode de fonctionnement (superviseur et utilisateur). Appels système.
  • Organisation des sources (Include/linux, Arch, Kernel, Documentation, ...).
  • Principe de compilation du noyau et des modules.
  • Les dépendances et symboles.
  • Les exportations de symboles.
  • Le chargement du noyau (support, argument,...).
  • Travaux pratiques
    Compilation et installation d'un noyau 3.x.

Les outils utilisables

  • Outils de développement (Gcc, Kbuild, Kconfig et Makefile, ...).
  • Outils de débogage (GDB, KGDB, ftrace, ...).
  • Environnement de débogage (Linux Trace Toolkit, ...).
  • Outil de gestion de version (Git, ...).
  • Tracer les appels système (ptrace, ...).
  • Travaux pratiques
    Installer l'ensemble des outils et des sources pour générer un module pour le noyau. Ecriture et test de modules simples.

Gestion des threads, scheduling

  • Représentation des threads (structure task_struct, thread_info, ...).
  • Les threads, contexte d'exécution.
  • Les ordonnanceurs de Linux et la préemption.
  • Création d'un thread noyau (kthread_create, wakeup_process, ...).
  • Travaux pratiques
    Créer un module qui créé un thread noyau lors de l'insertion et le décharge lors du rmmod. Ecriture d'un module d'horodatage d'événements à haute précision. Ecriture d'un module d'information sur les structures internes des processus.

Gestion de la mémoire, du temps et de proc

  • L'organisation mémoire pour les architectures UMA et NUMA.
  • L'espace d'adressage utilisateur et noyau.
  • Allocations mémoire, buddy allocator, kmalloc, slabs et pools mémoire.
  • La gestion des accès à la mémoire (les caches et la MMU).
  • La gestion de pages à la demande (demand paging), copy-on-write, allocations lazy.
  • Les problèmes liés à la sur-réservation de la mémoire (OOM killer).
  • Gestion de la mémoire sur x86 et ARM, utilisation des Hugepages.
  • Synchronisations et attentes dans le noyau, spinlocks, waitqueues, mutex et les completions.
  • L'horloge temps réel, RTC (real Time Clock), implémentation des timers, les jiffies.
  • Interface timers haute résolution, estampilles.
  • Les outils spécifiques au noyau, listes chaînées, kfifo et container_of.
  • L'interface noyau avec /proc par le procfs. Gestion mémoire par le procfs.
  • Travaux pratiques
    Utilisation des timers et des estampilles. Implémentation d'un accès au procfs. Mise en oeuvre de l'allocation mémoire dans le noyau et optimisation à l'aide des slabs.

Périphérique en mode caractère

  • Ecriture de pilotes de périphériques caractère.
  • Le VFS (Virtual File System).
  • Les méthodes associées aux périphériques caractères.
  • Gestion des interruptions, du DMA et des accès au matériel.
  • Enregistrement des pilotes de périphériques de type caractère et optimisations.
  • Travaux pratiques
    Ecriture progressive d'un pilote périphérique en mode caractère. Implémentation des synchronisations d'entrée-sortie entre threads et avec la routine d'interruption. Implémentation de l'allocation mémoire. Enregistrement d'une interuption partagée.

Linux Driver Framework - sysfs

  • Présentation du framework, kobject, kset et kref. Interaction avec le sysfs (/sys).
  • Les objets drivers, device driver, bus et class.
  • Utilisation et génération des attributs présentés dans le sysfs.
  • Interface avec le hotplug, méthodes match, probe et release.
  • Gestion du firmware.
  • Gestion de l'énergie, méthodes de gestion de l'énergie.
  • Travaux pratiques
    Implémentation d'un bus, d'un driver et d'un device driver. Adaptation du pilote de périphériques caractère. Exemple d'utilisation de l'interface.

Périphérique en mode bloc et systèmes de fichier

  • Principe des périphériques en mode bloc. Enregistrement du driver.
  • Callback de lecture et écriture. Support du formatage et opérations avancées.
  • Ordonnanceur des entrées-sorties par bloc du noyau.
  • Conception des systèmes de fichiers.
  • Enregistrement d'un nouveau système de fichiers.
  • Travaux pratiques
    Exemple de pilote complet de périphérique block virtuel. Exemple d'un système de fichiers personnalisé.

Interfaces et protocoles réseau

  • Gestion des interfaces réseau sous Linux.
  • Utilisation des skbuff.
  • Les hooks netfilter.
  • Intégration d'un protocole.
  • Travaux pratiques
    Exemple de driver réseau pour périphérique virtuel. Implémentation de protocole réseau.

Autres Drivers

  • Principe des périphériques USB. Interface avec le module USB-core.
  • Construction d'un URB (USB Request Block).
  • Les gadgets USB.
  • Les drivers audio
  • Les drivers vidéo, Linux Frame Buffer
  • les drivers d'entrée, drivers input.
  • Travaux pratiques
    Driver pour périphérique d'entrée (input)
Informations

Durée et prix du stage

Prochaines sessions:

30-09-2019Paris
07-10-2019Aix-En-Provence
14-10-2019Toulouse
21-10-2019Aix-En-Provence

Autres sessions:    
Contact:
S'inscrire:

Calendrier 2019

Consultez le calendrier complet de nos formations pour le premier semestre 2019.

Repas du midi et collations compris dans le prix.

Linux Embarqué
La formation linux embarqué est effectuée sur cartes beaglebone.
La carte est offerte aux stagiaires en fin de stage.


Site construit par M.N.I.S. en utilisant Bootstrap licence Apache V2 et Glyphicons Free licence CC BY 3.0
janvier 2015