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
Nos clients témoignent (5)
Informations supplémentaires très utiles
Grzegorz - Comp S.A.
Formation - BLoC Pattern
Traduction automatique
Edward est un excellent facilitateur
Zibusiso Ncube - Agricatural Research Council
Formation - Ionic 4 and Angular for Developers
Traduction automatique
Les connaissances de Miguel sur le sujet étaient vastes. Il a rendu la formation facile à comprendre, avec un déroulement bien équilibré, ajoutant de nouvelles fonctionnalités à chaque section au fur et à mesure que c'était nécessaire. Il a abordé tout ce qui avait été demandé et a répondu en détail à chacune des questions posées. C'était une expérience très agréable.
Paul Coaton - SEMPCheck Services
Formation - Flutter Development Bootcamp with Dart
Traduction automatique
J'ai trouvé que le contenu (à la fois théorique et pratique) était excellent et exactement ce que nous souhaitions/attendions. Les exercices étaient stimulants mais réalisables.
Mike Kleinau - iVolve
Formation - Introduction to Embedded Linux (Hands-on training)
Traduction automatique
Le formateur était enthousiaste, sympathique et passionné par le sujet.
Isaac Murphy - Royal New Zealand Airforce
Formation - Build Native iOS and Android Apps with Flutter
Traduction automatique