Plan du cours

Introduction

  • brève histoire de GNU/Linux
  • licence
  • version du noyau
  • cycle de publication
  • arbres du noyau
  • ligne principale
  • Noyau vs. espace utilisateur
  • mécanisme vs. politique
  • alternatives aux pilotes de noyau
  • RTOS vs Linux

Mémoire Management

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

Patch du noyau

  • cycle de vie
  • git
  • source du noyau
  • créer un patch
  • vérifier le patch
  • corriger le correctif
  • expédier le correctif
  • code audité

Modules du noyau

  • obtenir les sources du noyau
  • configurer/construire/installer
  • pilotes de périphériques (liés statiquement, chargés au moment de l'exécution)
  • initialiser/quitter
  • octroi de licences
  • EXPORTER LES SYMBOLES GPL
  • Makefile hors de l'arbre
  • module-init-tools
  • module dans l'arbre du noyau
  • Kconfig
  • passage de paramètres
  • clairsemé

Pilotes Char

  • architecture
  • interface utilisateur/noyau
  • Sous-système E/S
  • VFS
  • sysfs (périphériques, bus, pilotes, classes),
  • kobject/ktype/kset
  • modèle de pilote du noyau linux
  • fichiers de périphériques
  • pilote char
    • initialisation
    • enregistrement
    • ouvrir, libérer
    • cdev, cdev add, cdev del,...
    • numéros majeurs/mineurs
    • udev, udevmonitor, udevadm

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

  • ioctl
  • ioctl déverrouillé
  • compat ioctl
  • API de l'espace utilisateur
  • API de l'espace noyau
  • cycle de vie du processus
  • sommeil/blocage
  • sommeil/réveil
  • file d'attente
  • troupeau de tonnerre
  • poll/select

Débogage du noyau

  • bug
  • débogage
  • débogage du noyau
    • recherche binaire avec git
    • support de débogage du noyau
    • printk syslogd, klogd, loglevels, rate limit, debug levels, debug selective subsystems
    • débogage par interrogation de debugfs
    • débogage d'oops, affirmation d'oops
    • Clé magique SysRq
    • kgdb/kdb
    • JTAG

Traçage

  • gcov
  • lcov
  • oprofile
  • ftrace
    • traceur nop
    • traceur de fonctions
    • traceur de commutateur d'ordonnancement
    • Traceur de graphes de fonctions
    • traceur dynamique
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interruptions

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

Report du travail

  • moitiés supérieure et inférieure
  • softirqs
  • tasklets
  • files d'attente
  • Interruptions threadées

Concurrence

  • région/section critique
  • atomique
  • condition de course
  • synchronisation
  • verrouillage
  • solutions de verrouillage
  • blocage
  • contention
  • que verrouiller ?
  • que peut-on utiliser ?
    • opérations atomiques
    • verrous de rotation
    • verrous de rotation lecteur-écrivain
    • sémaphore
    • sémaphore binaire
    • mutex
    • sémaphore lecteur-écrivain
    • variables d'achèvement
    • verrous séquentiels
    • désactiver la préemption
    • ordre et barrières

Temps

  • HZ
  • Jiffies
  • grands/petits délais
  • minuteries du noyau

E/S matérielles

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

Utilisateur-Noyau Communication

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

Portabilité

  • taille des mots
  • types opaques
  • caractères signés/non signés
  • alignement des données
  • promotion intégrale
  • réutilisation du code
  • endianité
  • tique du système
  • taille de la page
  • ordre des instructions
  • SMP/préemption/mémoire élevée

Sauf indication contraire, le contenu et ce plan de cours sont placés sous licence Attribution-NonCommercial-ShareAlike 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'un shell en ligne de commande
  • Connaissance de base de l'espace utilisateur et du développement d'applications
  • Connaissance intermédiaire de la programmation en C
  • Avoir déjà participé à Embedded GNU/Linux Systems Architecture (fortement recommandé !) et/ou avoir une bonne compréhension des sujets abordés.
 35 Heures

Nombre de participants


Prix ​​par Participant

Nos clients témoignent (5)

Cours à venir

Catégories Similaires