Merci d'avoir envoyé votre demande ! Un membre de notre équipe vous contactera sous peu.
Merci d'avoir envoyé votre réservation ! Un membre de notre équipe vous contactera sous peu.
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