Formation Linux embarqué et temps réel¶
Résumé
Cette formation comprends deux parties:
La fabrication d’un système Linux embarqué, construction du noyau pour une cible en cross-compilation, fabrication complète du root filesystem, configuration des interfaces réseau, des daemons système, des utilisateurs…
L’étude du noyau Linux en mettant l’accent sur les difficultés d’obtenir un système temps réel avec le noyau de base puis l’étude de différentes solutions, co-noyau, patch preempt-RT, hyperviseur temps réel, suivit de l’implémentation et du test d’une solution Linux-RT.

Linux embarqué¶
La chaîne de cross-compilation
Récupérer les outils de cross-compilation sur Internet
Construire les outils avec Buildroot
Le format ELF, les outils de gestion, objdump, readelf, objcopy…
Le boot Loader
U-Boot le boot loader préféré de l’embarqué
Construction de U-Boot
Utiliser U-Boot comme BIOS
Ajouter une commande à U-Boot, test de mémoire
Ajouter un nouveau BSP à U-Boot
L’initialisation
Le chargement du noyau
Points d’entrée du BSP
Utilisation d’un Device Tree
La configuration d’un noyau
le système de configuration, Kbuild et Kconfig
les principales entrées du système de configuration
Ajouter un nouveau driver dans l’arbre du noyau
La sécurisation du chargement
Uboot et secure boot
Gestion des clefs et PKI
Signature du noyau
Signature des modules
Le root filesystem
Fabrication pas à pas du root filesystem
Busybox, intérêt, configuration et adaptation
Les principaux répertoires de Linux
L’utilité de devtmpfs, procfs et sysfs
La configuration du noyau dans le procfs
Gérer le hotplug et l’énergie dans le sysfs
La sécurisation du système par les cgroups
Le debug et les traces par le debugfs
Savoir écrire un driver simple
Ecriture d’un pilote de périphérique en mode caractère
Les callbacks de la file_operations
Extensions de l’interface d’enregistrement d’un device
Les devices misc
Le support du root filesystem: les flash
Les différentes flash
Les systèmes de fichiers spécifiques pour les flash
JFFS2, UBIFS et YAFFS
ROMFS, CRAMFS
les systèmes de fichier transparents
Interfaces et protocoles réseau
Gestion des interfaces réseau sous Linux
Les socket buffers skbuf
Implémentation et options de la pile IPv4 sous Linux
Linux temps réel¶
La notion de temps réel: le Déterminisme
D’ou vient l’indeterminisme ?
Le matériel
le logiciel
Le fonctionnement du noyau Linux
Qu’est-ce qu’un process, un thread
L’ordonnancement des threads
Les différents scheduleurs Linux
Temps partagé: Completely Fair Scheduler
POSIX temps réel: FIFO et RR
Le scheduler EDF: Deadline scheduler
Contexte de thread et contexte d’interruption
Les processeurs multi-scalaires, pipelines et barrières
La gestion des caches
Comment la gestion des caches modifie le fonctionnement POSIX
L’influence des caches sur l’écriture d’applications multi-thread
Optimisations, Cache Allocation Technilogy, Tightly Coupled Memory
Les problèmes liés au multi-threading
Topologies multi-processeur et multi-coeur, les spinlocks
La synchronisation des threads
Les wait-queues et les works
Les mutex et les completion
Gestion mémoire
Mémoire physique et mémoire virtuelle: la MMU
Gestion mémoire noyau
Gestion de la mémoire utilisateur et déni de fonctionnement
Optimiser la gestion mémoire pour le temps réel
L’accès au matériel
La notion de temps dans le noyau, les horloges
Les timers haute résolution, précision des timers, les slacks
La gestion des interruptions, les tasklet et les softirq
DMA Direct Memory Access, IOMMU et synchronisation de cache
LinuxRT ou le preempt patch
Les modifications apportées par LinuxRT
Mise en oeuvre des patchs
Tests sur la latence du timer avec cyclictest
Les solutions de co-noyau
RTLinux, RTAI et Xenomai
Présentation d’un co-noyau
Xenomai
Jailhouse
Les hyperviseurs temps-réel
Xtratum
L4 et pikeOS
un micro hyperviseur: X-Hyp
Utiliser KVM/QEMU dans un cadre temps réel