Plan du cours

Introduction

  • Histoire rapide de GNU/Linux
  • Licences
  • Gestion des versions du noyau
  • Cycle de développement
  • Arbres de noyaux
  • Ligne principale
  • Noyau vs. espace utilisateur
  • Mécanisme vs. politique
  • Alternatives aux pilotes de 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

Patch de noyau

  • Cycle de vie
  • Git
  • Code source du noyau
  • Créer un patch
  • Vérifier un patch
  • Corriger un patch
  • Envoyer un patch
  • Code audité

Modules de noyau

  • Obtenir les sources du noyau
  • Configurer/compiler/installer
  • Pilotes de périphériques (liés statiquement, chargés à l'exécution)
  • Initialisation/sortie
  • Licences
  • EXPORT_SYMBOL_GPL
  • Makefile hors-arbre
  • Module-init-tools
  • Module dans l'arbre du noyau
  • Kconfig
  • Passage de paramètres
  • Sparse

Pilotes de caractères

  • Architecture
  • Interface utilisateur/noyau
  • Sous-système I/O
  • VFS
  • Sysfs (périphériques, bus, pilotes, classes),
  • Kobject/ktype/kset
  • Modèle de pilote du noyau Linux
  • Fichiers de périphériques
  • Pilote de caractères
    • Initialisation
    • Enregistrement
    • Ouvrir, libérer
    • cdev, cdev_add, cdev_del,...
    • Numéros majeurs/mineurs
    • udev, udevmonitor, udevadm

Opérations avancées de pilotes de caractères

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API espace utilisateur
  • API espace noyau
  • Cycle de vie du processus
  • Dormir/bloquer
  • Dormir/se réveiller
  • File d'attente
  • Grappe de processus (thundering herd)
  • poll/select

Débogage du noyau

  • Débogage
  • Débogage du noyau
    • Recherche dichotomique avec Git
    • Support de débogage fourni par le noyau
    • printk, syslogd, klogd, niveaux de logs, limitation du taux, niveaux de débogage, sous-systèmes de débogage sélectifs
    • Débogage en interrogeant debugfs
    • Débogage des oops, assertion d'oops
    • Touche Magic SysRq
    • kgdb/kdb
    • JTAG

Traçage

  • gcov
  • lcov
  • oprofile
  • ftrace
    • traceur nop
    • traceur de fonctions
    • traceur d'alternance de planification (sched switch)
    • traceur de graphes de fonction
    • traceur dynamique
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interruptions

  • Interruptions vs. sondage (polling)
  • Interruption
  • Sections de programme
  • Re-entrée
  • Événements
  • Gestionnaire d'interruption
  • Gestionnaire d'interruption partagé
  • Flux d'interruption
  • Contrôle des interruptions

Report de travail

  • Parties supérieures/inférieures (top/bottom halves)
  • Softirqs
  • Tasklets
  • Files d'attente de travail (work queues)
  • Interruptions en thread

Concurrency

  • Région critique/section critique
  • Opérations atomiques
  • Condition de course (race condition)
  • Synchronisation
  • Verrouillage (locking)
  • Solutions de verrouillage
  • Deadlock
  • Contention
  • Que faut-il verrouiller ?
  • Quels outils peuvent être utilisés ?
    • Opérations atomiques
    • Verrous de spin (spin locks)
    • Verrous de spin lecteur-écrivain (reader-writer spin locks)
    • Sémaphores
    • Sémaphores binaires
    • Verrous mutuels (mutex)
    • Sémaphores lecteur-écrivain
    • Variables de fin d'exécution (completion variables)
    • Verrous séquentiels (sequential locks)
    • Désactiver la préemption
    • Ordonnancement et barrières

Temps

  • HZ
  • Jiffies
  • Grands/petits délais
  • Timers du noyau

I/O Matériel

  • Ports I/O
  • Mémoire I/O
  • Comment gérer les effets de bord lors de l'accès aux registres ?

Communication utilisateur-noyau

  • put(get)_user()
  • copy to(from)_user()
  • I/O 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 du code
  • Endianness
  • Tick système
  • Taille de page
  • Ordonnancement des instructions
  • SMP/préemption/mémoire haute

Sauf mention contraire, le contenu et cette structure de cours sont autorisés sous licence Attribution-Pas d'Utilisation Commerciale-Partage dans les Mêmes Conditions 4.0 International (CC BY-NC-SA 4.0).

Pré requis

  • Connaissance de base de l'utilisation d'un système GNU/Linux en tant qu'utilisateur final
  • Connaissance de base d'une ligne de commande shell
  • Connaissance de base du développement espace utilisateur / application
  • Connaissances intermédiaires en programmation C
  • Avoir suivi Architecture des systèmes GNU/Linux embarqués avant (fortement recommandé !) et/ou avoir une bonne compréhension des sujets abordés là-bas
 35 Heures

Nombre de participants


Prix ​​par Participant

Nos clients témoignent (5)

Cours à venir

Catégories Similaires