Course Code: ldd
Duration: 35 hours
Prerequisites:
- Une familiarité de base avec l'utilisation d'un système GNU/Linux en tant qu'utilisateur final
- Une familiarité de base avec un shell en ligne de commande
- Des connaissances de base en développement d'applications en espace utilisateur
- Des connaissances intermédiaires en programmation C
- Avoir suivi l'architecture des systèmes GNU/Linux embarqués auparavant (fortement recommandé !) et/ou avoir une bonne compréhension des sujets y étant abordés
Overview:
Description
Ce cours de formation de 5 jours utilise des exercices pratiques combinés à un enseignement pour illustrer les concepts liés aux internalités du noyau GNU/Linux et au développement de pilotes de périphériques. Il est conçu pour vous mettre à niveau rapidement. Nous décrivons les processus, les concepts et les commandes nécessaires à l'écriture de pilotes GNU/Linux à travers une combinaison de théorie et de formation en situation de travail.
Inventez la roue à votre façon, mais apprenez auprès d'un formateur expérimenté et repartez avec une connaissance opérationnelle et la capacité de l'utiliser efficacement dans votre propre projet de développement intégré.
À qui s'adresse cette formation ?
Personnes intéressées par ou chargées du développement ou de l'évaluation de pilotes GNU/Linux pour systèmes embarqués, tels que les ingénieurs logiciels, les ingénieurs terrain, les chefs de projet, les ingénieurs matériels.
Course Outline:
Introduction
- Historique rapide de GNU/Linux
- Licensing
- Versionnement du noyau
- Cycle de release
- Arborescences du noyau
- Branche principale (mainline)
- 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
Patchs du noyau
- Cycle de vie
- Git
- Source du noyau
- Création de patch
- Vérification de patch
- Correction de patch
- Livraison de patch
- Code audité
Modules du noyau
- Obtention des sources du noyau
- Configuration/génération/installation
- Pilotes de périphériques (liés statiquement, chargés au moment de l'exécution)
- Init/exit
- Licensing
- EXPORT_SYMBOL GPL
- Makefile hors arborescence du noyau
- Module-init-tools
- Module dans l'arborescence du noyau
- Kconfig
- Transmission de paramètres
- Sparse
Pilotes caractère (Char Drivers)
- Architecture
- Interface utilisateur/noyau
- Sous-système E/S
- VFS (Filesystem Virtuel du Noyau)
- sysfs (périphériques, bus, pilotes, classes),
- kobject/ktype/kset
- Modèle de pilote du noyau Linux
- Fichiers de périphérique
-
Pilote caractère
- Initialisation
- Enregistrement
- Ouverture, fermeture
- cdev, ajout cdev, suppression cdev, ...
- Numéros majeurs/mineurs
- udev, udevmonitor, udevadm
Opérations avancées des pilotes caractère
- ioctl
- ioctl déverrouillé
- ioctl de compatibilité
- API espace utilisateur
- API espace noyau
- Cycle de vie du processus
- Mise en veille/blocage
- Mise en veille/réveil
- File d'attente d'attente
- Phénomène du troupeau tonitruant (thundering herd)
- poll/select
Débogage du noyau
- Débogage
-
Débogage du noyau
- Recherche binaire avec git
- Support de débogage depuis le noyau
- printk syslogd, klogd, niveaux log, limitation de débit, niveaux de débogage, sous-systèmes ciblés
- Débogage par interrogation de debugfs
- Débogage d'oops, génération d'oops
- Touche magique SysRq
- kgdb/kdb
- JTAG
Traçage
- gcov
- lcov
- oprofile
-
ftrace
- traceur nop
- traceur de fonctions
- traceur de changement de planification
- traceur de graphe de fonctions
- traceur dynamique
- trace-cmd/kernelshark
- perf
- LTTng
Interruptions
- Interruptions vs sondage
- Interruption
- Sections de programme
- Réentrance
- Événements
- Gestionnaire d'interruption
- Gestionnaire d'interruption partagé
- Flux d'interruption
- Contrôle d'interruption
Report de travail
- Demi-haut/demi-bas
- Softirqs
- Tasklets
- Files de travail
- Interruptions threadées
Concurrence
- Région/section critique
- Opérations atomiques
- Condition de concurrence
- Synchronisation
- Verrouillage
- Solutions de verrouillage
- Interblocage (deadlock)
- Contention
- Que verrouiller ?
-
Que peut-on utiliser ?
- Opérations atomiques
- Spinlocks
- Spinlocks lecteur-écrivain
- Sémaphore
- Sémaphore binaire
- Mutex
- Sémaphore lecteur-écrivain
- Variables de complétion
- Verrous de séquentialité
- Désactivation de la préemption
- Ordre et barrières
Temps
- HZ
- Jiffies
- Délais longs/courts
- Minuteur du noyau
E/S matériel
- Ports E/S
- Mémoire E/S
- Comment gérer les effets secondaires lors de l'accès aux registres ?
Communication utilisateur-noyau
- put(get)_user()
- copie vers(depuis)_user()
- E/S du noyau
- Mappage mémoire
- procfs
- sysfs
- debugfs
- relayfs
- Netlink
- ioctl
Portabilité
- Taille des mots
- Types opaques
- Char signé/non signé
- Alignement des données
- Promotion entière
- Réutilisation du code
- Ordre des octets (endianness)
- Ticks système
- Taille des pages
- Ordonnancement des instructions
- SMP/préemption/mémoire haute
Sauf indication contraire, le contenu de ce programme est sous licence Attribution-Pas d'Utilisation Commerciale-Partage dans les Mêmes Conditions 4.0 International (CC BY-NC-SA 4.0).
United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers
Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers
Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers
Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers
South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers
Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo
Canada - Embedded GNU/Linux Kernel Internals and Device Drivers
香港 - Embedded GNU/Linux Kernel Internals and Device Drivers
澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers
台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers
USA - Embedded GNU/Linux Kernel Internals and Device Drivers
Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení
Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers
Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers
Finland - Embedded GNU/Linux Kernel Internals and Device Drivers
Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών
Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók
Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers
Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers
Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers
España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Italia - Interni del kernel GNU/Linux e driver di dispositivo
Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers
Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's
Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere
Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo
România - Internele Nucleului GNU/Linux și Driverele de Dispozitive
Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner
Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri
Malta - Embedded GNU/Linux Kernel Internals and Device Drivers
Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés
France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés
日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ
Australia - Embedded GNU/Linux Kernel Internals and Device Drivers
Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers
New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers
Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers
Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers
Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers
Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị
India - Embedded GNU/Linux Kernel Internals and Device Drivers
Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń
United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers
South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버
Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers
Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers
Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства
Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers
Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive
Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers
Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers
Oman - Embedded GNU/Linux Kernel Internals and Device Drivers
Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers
Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers
Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers
Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers
Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers
Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers
Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers
Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers
Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers
US Government - Embedded GNU/Linux Kernel Internals and Device Drivers