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
- 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
Nos clients témoignent (3)
Tout va bien.
Adrian Rybka - SEOyon
Formation - Flutter Development Bootcamp with Dart
Traduction automatique
Informations supplémentaires très utiles
Grzegorz - Comp S.A.
Formation - BLoC Pattern
Traduction automatique
La présentation du formateur et sa manière de communiquer.
Gianpiero Arico - Urmet Spa
Formation - Embedded Linux Systems Architecture
Traduction automatique