Prenez contact avec nous

Plan du cours

Introduction

  • histoire rapide de GNU/Linux
  • licences
  • versionnement du noyau
  • cycle de publication
  • branches du noyau (kernel trees)
  • noyau principal (mainline)
  • noyau vs. espace utilisateur
  • mécanisme vs. politique
  • alternatives de pilotes pour le noyau
  • RTOS vs. Linux

Gestion de la mémoire

  • mémoire virtuelle vs. mémoire physique
  • allocation de mémoire dans le noyau
  • pages
  • zones
  • API
  • Slab

Correctif de noyau (Kernel Patch)

  • cycle de vie
  • git
  • source du noyau
  • création d'un correctif (patch)
  • vérification du correctif (checkpatch)
  • correction du correctif (fixpatch)
  • déploiement du correctif
  • code audit

Modules du noyau

  • téléchargement des sources du noyau
  • configuration/compilation/instalation
  • pilotes de périphériques (liés statiquement, chargés à l'exécution)
  • fonctions init/exit
  • licences
  • EXPORT_SYMBOL GPL
  • fichier Makefile hors arbre du noyau
  • module-init-tools
  • module dans l'arbre du noyau
  • Kconfig
  • transmission de paramètres
  • sparse

Pilotes caractéristiques (Char Drivers)

  • architecture
  • interface utilisateur/ noyau
  • sous-système d'E/S
  • VFS
  • sysfs (périphériques, bus, pilotes, classes)
  • kobject/ktype/kset
  • modèle de pilote du noyau Linux
  • fichiers de périphérique
  • Pilote caractéristique

    • initialisation
    • enregistrement
    • open, release
    • cdev, cdev_add, cdev_del, ...
    • numéros majeur/minor
    • udev, udevmonitor, udevadm

Opérations avancées des pilotes caractéristiques

  • ioctl
  • ioctl non débloqué (unlocked ioctl)
  • ioctl de compatibilité
  • API espace utilisateur
  • API espace noyau
  • cycle de vie du processus
  • mise en veille/blocage
  • réveil/sortie de veille
  • file d'attente d'attente (wait queue)
  • herd de tonnerre (thundering herd)
  • poll/select

Débogage du noyau

  • débogage
  • débogage du noyau

    • recherche binaire avec git
    • support de débogage intégré au noyau
    • printk, syslogd, klogd, niveaux de journalisation, limite de débit, niveaux de débogage, débogage de sous-systèmes spécifiques
    • débogage par interrogation de debugfs
    • débogage d'oops, déclenchement d'oops
    • Touches Magic SysRq
    • kgdb/kdb
    • JTAG

Tracé (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace

    • traceur nop
    • traceur de fonctions
    • traceur de changement de planification (sched switch)
    • traceur de graphes de fonctions
    • traceur dynamique
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interruptions

  • interruptions vs. sondage (polling)
  • interruption
  • sections de programme
  • réentrance
  • événements
  • gestionnaire d'interruption
  • gestionnaire d'interruption partagé
  • flux d'interruption
  • contrôle des interruptions

Report de travail

  • partie haute/partie basse (top/bottom halves)
  • softirqs
  • tasklets
  • files de travail (work queues)
  • interruptions threadées

Concurrence

  • zone/section critique
  • atomique
  • condition de course
  • synchronisation
  • verrouillage
  • solutions de verrouillage
  • interblocage (deadlock)
  • contention
  • que verrouiller ?
  • que peut-on utiliser ?

    • opérations atomiques
    • verrous spin (spinlocks)
    • verrous spin lecteur-écrivain
    • sémaphore
    • sémaphore binaire
    • mutex
    • sémaphore lecteur-écrivain
    • variables de complétion
    • verrous séquentiels
    • désactivation de la préemption
    • ordonnancement et barrières (barriers)

Temps

  • HZ
  • Jiffies
  • retards longs/courts
  • timers du noyau

E/S matérielle

  • ports d'E/S
  • mémoire d'E/S
  • Comment gérer les effets de bord lors de l'accès aux registres ?

Communication utilisateur-noyau

  • put(get)_user()
  • copy to(from)_user()
  • E/S du noyau
  • mappage de mémoire
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilité

  • taille des mots
  • types opaques
  • char signé/non signé
  • alignement des données
  • promotion intégrale
  • réutilisation de code
  • endianness (ordre des octets)
  • tick système
  • taille de page
  • ordre des instructions
  • SMP/préemption/mémoire haute

À moins qu'une mention contraire ne soit faite, le contenu de ce programme de cours est soumis à la licence Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Pré requis

  • Connaissances de base de l'utilisation d'un système GNU/Linux en tant qu'utilisateur final
  • Connaissances de base de l'utilisation d'un shell en ligne de commande
  • Notions élémentaires de développement en espace utilisateur (espace applicatif)
  • Connaissances intermédiaires en programmation C
  • Avoir suivi au préalable L'architecture des systèmes GNU/Linux embarqués (fortement recommandé) et/ou posséder une bonne compréhension des sujets abordés dans ce cours
 35 Heures

Nombre de participants


Prix par participant

Nos clients témoignent (3)

Cours à venir

Catégories Similaires