Embed RTL
Embed RTL
2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Sommaire
1 Introduction
Organisation et objectifs
1
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Les objectifs :
Définition des systèmes embarqués et temps réel
Différents types de systèmes embarqués temps réel
Systèmes embarqués intégrant un SE (OS)
Les bases d’un système temps réel et programmation
multi-tâches (cas d’un mono-processeur)
Architecture d’un système à base de Linux embarqué
Conception d’un OS Linux embarqué pour une plateforme
matérielle spécifique
Linux temps réel (RTAI et Xenomai)
1
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Motivations
2
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Motivations
Xilinx Zynq
TP : 20h (5 séances)
4
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Références
5
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Références
6
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Références
7
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Organisation et objectifs
Plateforme matérielle
Beaglebone Black
Plateforme matérielle
Beaglebone Black
9
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Sommaire
2 Systèmes embarqués
Définition
Caractéristiques
Systèmes embarqués et temps réel
Architecture d’un système embarqué à base de µP
9
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Définition
Système embarqué
Un système embarqué (embedded system) est un système
assurant une fonction dédiée et qui est généralement conçu pour
être utilisé avec une application logicielle spécifique
10
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Définition
L’évolution des systèmes embarqués a progressé au rythme
des avancées technologiques notamment des processeurs
Passage rapide des processeurs 4 bits vers 64 bits
Un marché très lucratif ( quelques centaines de milliards
par an)
Un système embarqué est souvent un système mixte :
numérique avec une interface analogique
Utilise généralement un processeur ou/et un circuit
programmable
Exécute un logiciel dédié pour réaliser une fonctionnalité
précise.
Ne possède pas d’entrées-sorties standard comme clavier
d’un PC ou un écran classique
11
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Définition
Systèmes embarqués
Exemples
13
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Exemples
14
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Exemples
15
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Exemples
16
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Définition
Systèmes embarqués
Exemples
Sommaire
2 Systèmes embarqués
Définition
Caractéristiques
Systèmes embarqués et temps réel
Architecture d’un système embarqué à base de µP
17
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Caractéristiques
Systèmes embarqués
Caractéristiques d’un système embarqué :
Fonctionnement en temps réel (pas obligatoire)
→ Réactivité : des opérations de calcul doivent être faites
en réponse à un événement extérieur (interruption
matérielle).
→ La validité d’un résultat (et sa pertinence) dépend du
moment où il est délivré.
→ Rater une échéance peut et cause souvent une erreur de
fonctionnement.
Beaucoup de systèmes sont multirate et traitent les
informations à différents rythmes
Faible taille
Faible consommation
Environnement imprévisible (n’évolue pas dans un
environnement contrôlé)
Sûreté de fonctionnement et Faible coût 18
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Systèmes embarqués et temps réel
Sommaire
2 Systèmes embarqués
Définition
Caractéristiques
Systèmes embarqués et temps réel
Architecture d’un système embarqué à base de µP
18
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Systèmes embarqués et temps réel
20
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Systèmes embarqués et temps réel
21
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Systèmes embarqués et temps réel
▷ ...
Un OS qui s’est imposé ces dernières années dans le monde
des systèmes embarqués est le Linux
Linux de base n’est pas temps réel → il y a des solutions
qui le rendent temps réel (déterministe et préemptif)
Sommaire
2 Systèmes embarqués
Définition
Caractéristiques
Systèmes embarqués et temps réel
Architecture d’un système embarqué à base de µP
22
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Architecture d’un système embarqué à base de µP
Sommaire
23
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Les bases d’un système temps réel
Introduction
Le multi-tâches
exécution séquentielle
(mono µP )
exécution parallèle
(plusieurs µP )
exécution pseudo parallèle
(mono µP )
24
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Les bases d’un système temps réel
Introduction
Définition d’une tâche
Introduction
Définition d’une tâche
26
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Les bases d’un système temps réel
Introduction
Définition d’une tâche
27
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Les bases d’un système temps réel
Introduction
Définition d’une tâche
28
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Les bases d’un système temps réel
Introduction
Horloge temps réel
29
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Les bases d’un système temps réel
Introduction
Système temps réel : besoins
31
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Sommaire
31
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnanceur
32
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnanceur
Les politiques d’ordonnancement
33
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Tâches
34
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnanceur
35
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnanceur
Priorité (préemptif)
Ordonnanceur
Priorité (préemptif)
→ d d d d d d?
37
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnancement
Partage de temps
Ordonnancement
Partage de temps
39
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnancement
Préemptif + à partage de temps
Ordonnanceur
Ordonnancement non préemptif
41
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnancement
Primitives d’ordonnancement
42
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnancement
Primitives d’ordonnancement
43
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnancement
Primitives d’ordonnancement
Un autre exemple
Tâche 1 2 3
Durée 3 3 2
Priorité 2 1 1
De quel type d’ordonnancement s’agit-il ?
44
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Ordonnanceur
Ordonnancement
Primitives d’ordonnancement
Un autre exemple
Tâche 1 2 3
Durée 3 3 2
Priorité 2 1 1
De quel type d’ordonnancement s’agit-il ?
45
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Sommaire
45
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
46
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
47
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
48
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
49
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
50
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
Mémoire virtuelle
la mémoire d’un processus n’est pas la même que la
mémoire physique
un processus demande d’accéder à la mémoire physique
→ l’adresse virtuelle sera décodée en adresse physique
51
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
52
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
P1
Registre de base P2
P4
P3
Adresse virtuelle
Offset + P4
P5
Partitionnement fixe
un registre de base
l’adresse physique = l’adresse de base + add. virtuelle
simple mise en œuvre
problème de fragmentation interne
→ la mémoire non utilisée par un processus est non
accessible aux autres processus
53
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
Partitionnement variable
Mémoire physique
Registre de base
P4 P1
Registre de limitation
P2
P3
Adresse virtuelle
Oui
Offset < + P3
Non
Erreur de protection
un registre de plus → de limitation
le calcul de l’adresse physique comme dans le PF
pas de fragmentation interne comme dans le PF
Problème : fragmentation externe
54
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
Page 4
Page N
Page 5
55
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
Table de
0xBAADF translation
0x900DF
# de page virtuelle # de page physique
Table de page
56
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
0x00000000
Adresse virtuelle
# de page Offset Page 1
0xBAADF 0xF00D
Adresse physique
Page 2
# de page Offset
Table de page
0x900DF 0xF00D Page 3
…..
# de page 0x900DF00D
Page N
0xFFFFFFFF
57
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
58
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
59
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion de mémoire
Gestion de mémoire
60
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion des interruptions
Sommaire
60
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion des interruptions
61
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Gestion des interruptions
63
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Commutation de tâches
Sommaire
63
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Commutation de tâches
Commutation de tâches
64
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Commutation de tâches
Commutation de tâches
65
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Sommaire
65
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnançabilité
Introduction
66
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnançabilité
Introduction
67
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnançabilité
Introduction
Ai : moment d’activation
de la tâche i (ready)
Ti : période d’activation de
la tâche i
Ci : durée de la tâche i
Pi : priorité de la tâche i
68
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Exemple d’attribution de priorité
69
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Condition d’ordonnancement
1
G = N ∗ (2 N − 1) (1)
N
X Ci 1
U= < G = N ∗ (2 N − 1) (2)
Ti
i=1
70
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Condition d’ordonnancement
N G
1 1
2 0.82 U : taux de charge du CPU
3 0.78 si G < U < 1 : pas de
.. .. conclusion avec ce test
∞ 0.69
71
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Condition d’ordonnancement
72
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Exemples
Exemple 1 :
73
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Exemples
74
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Exemples
Exemple 2 :
75
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Exemples
Exemple 3 :
76
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
Exemples
77
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
L’analyse de temps de réponse (RTA)
Wi < Ti (3)
Wi = Ci + Ii (4)
78
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Ordonnancement RM
L’analyse de temps de réponse (RTA)
Ci
⌈ ⌉ · Cj (5)
Tj
Ordonnancement RM
L’analyse de temps de réponse (RTA)
80
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Exemple 1
Process Période Ti Durée Ci Priorité Pi
a 7 3 1
b 12 3 2
c 20 5 3
Ca = 3
Wa0 = Ca + Ia = 3 + 0 = 3
Wb0 = Cb = 3
W0
Wb1 = Cb + ⌈ Tab ⌉ · Ca = 3 + ⌈ 73 ⌉ · 3 = 6
W1
Wb2 = Cb + ⌈ Tab ⌉ · Ca = 3 + ⌈ 76 ⌉ · 3 = 6
Wc0 = Cc = 5
81
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
0 0
Wc1 = Cc + ⌈ W Wc 5 5
Ta ⌉ · Ca + ⌈ Tb ⌉ · Cb = 5 + ⌈ 7 ⌉ · 3 + ⌈ 12 ⌉ · 3 = 11
c
1 1
Wc2 = Cc + ⌈ W Wc 11 11
Ta ⌉ · Ca + ⌈ Tb ⌉ · Cb = 5 + ⌈ 7 ⌉ · 3 + ⌈ 12 ⌉ · 3 = 14
c
2 2
Wc3 = Cc + ⌈ W Wc 14 14
Ta ⌉ · Ca + ⌈ Tb ⌉ · Cb = 5 + ⌈ 7 ⌉ · 3 + ⌈ 12 ⌉ · 3 = 17
c
3 3
Wc4 = Cc + ⌈ W Wc 17 17
Ta ⌉ · Ca + ⌈ Tb ⌉ · Cb = 5 + ⌈ 7 ⌉ · 3 + ⌈ 12 ⌉ · 3 = 20
c
4 4
Wc5 = Cc + ⌈ W Wc 20 20
Ta ⌉ · Ca + ⌈ Tb ⌉ · Cb = 5 + ⌈ 7 ⌉ · 3 + ⌈ 12 ⌉ · 3 = 20
c
82
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
Exemple 2
Process Période Ti Durée Ci Priorité Pi
c 80 40 3
b 40 10 2
a 20 5 1
Ca = 5
Wa0 = Ca + Ia = 5 + 0 = 5
Wb0 = Cb = 10
W0 10
Wb1 = Cb + ⌈ Tab ⌉ · Ca = 10 + ⌈ 20 ⌉ · 5 = 15
W1 15
Wb2 = Cb + ⌈ Tab ⌉ · Ca = 10 + ⌈ 20 ⌉ · 5 = 15
Wc0 = Cc = 40
83
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Test d’ordonnançabilité
0 0
Wc1 = Cc +⌈ W Wc 40 40
Ta ⌉·Ca +⌈ Tb ⌉·Cb = 40+⌈ 20 ⌉·5+⌈ 40 ⌉·10 = 60
c
1 1
Wc2 = Cc +⌈ W Wc 60 60
Ta ⌉·Ca +⌈ Tb ⌉·Cb = 40+⌈ 20 ⌉·5+⌈ 40 ⌉·10 = 75
c
2 2
Wc3 = Cc +⌈ W Wc 75 75
Ta ⌉·Ca +⌈ Tb ⌉·Cb = 40+⌈ 20 ⌉·5+⌈ 40 ⌉·10 = 80
c
3 3
Wc4 = Cc +⌈ W Wc 80 80
Ta ⌉·Ca +⌈ Tb ⌉·Cb = 40+⌈ 20 ⌉·5+⌈ 40 ⌉·10 = 80
c
84
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Sommaire
4 Programmation multi-tâches
Le partage de ressources
Mutex
Sémaphores
Moniteurs
Timers & Signaux
84
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
Dans une application multi-tâches, certaines ressources
(logicielles ou matérielles) peuvent être partagées entre
plusieurs tâches.
De manière générale, l’accès à une ressource commune doit
être réglementé, sous peine d’engendrer un
dysfonctionnement de l’application.
Exemple 1 :
partage d’une ressource commune - écran
Tâche 1 : Tâche 2 :
begin begin
while true do while true do
print("Task 1!\n"); print("Ksat 2!\n");
end while; end while;
end; end;
85
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
Hypothèse de simulation :
ordonnanceur à partage de temps
la durée de commutation de tâches négligée
quantum de temps = 4ms
affichage d’un caractère = 1ms
Que verra-t-on s’afficher à l’écran ?
86
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
TaskKsat 1!<CR><LF>
2!<CR><LF>
TaskKsat 1!<CR><LF>
2!<CR><LF>
...
87
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
Exemple 2 : affichage de l’heure
partage d’une ressource commune = variable hour
T1 : affiche l’heure
Tâche 2 :
T2 : met à jour l’heure
begin
if secondes = 59 then
if minutes = 59 then
minutes = 0;
Tâche 1 : if hours = 23 then
hours = 0;
begin else
print(seconds) hours = hours +1;
print(minutes) end if;
print(hours) else
end; minutes = minutes +1;
end if;
secondes = 0;
else
secondes = secondes + 1;
end if;
end;
88
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
Hypothèse de simulation :
ordonnanceur à partage de temps
la durée de commutation de tâches négligée
La tâche 1 interrompue par la tâche 2 s’exécutant en entier
Conditions initiales : time = 11:59:59
Que verra-t-on s’afficher sur l’écran ?
89
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
T1: seconds: 59
T1: minutes: 59
T2: time= 12:00:00
T1: hour: 12
90
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Le partage de ressources
Le partage de ressources
T2: hours: 12
T2: minutes: 00
T1: time= 12:00:59
T2: seconds: 00
91
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Sommaire
4 Programmation multi-tâches
Le partage de ressources
Mutex
Sémaphores
Moniteurs
Timers & Signaux
91
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
Mutex
Sémaphore binaire
pthread_mutex_lock(pthread_mutex_t *mutex);
pthread_mutex_unlock(pthread_mutex_t *mutex);
93
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
94
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
95
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
Tache()
{
...
pthread_mutex_lock(mutex_ptr);
//lecture/ecriture sur la ressource : la section critique
pthread_mutex_unlock(mutex_ptr);
}
96
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
int counter;
for(i=0; i<(0xFFFFFFFF);i++);
printf("\n Job %d finished\n", counter);
return NULL;
97
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
int main(void)
{
int i = 0;
int err;
while(i < 2)
{
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
if (err != 0)
printf("\ncan’t create thread :[%s]", strerror(err));
i++;
}
pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);
return 0;
98
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
Source [Link]
99
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
int counter;
pthread_mutex_t lock;
unsigned long i = 0;
counter += 1;
printf("\n Job %d started\n", counter);
for(i=0; i<(0xFFFFFFFF);i++);
100
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
pthread_mutex_unlock(&lock);
return NULL;
}
int main(void)
{
int i = 0;
int err;
if (pthread_mutex_init(&lock, NULL) != 0)
{
printf("\n mutex init failed\n");
return 1;
}
101
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
while(i < 2)
{
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
if (err != 0)
printf("\ncan’t create thread :[%s]", strerror(err));
i++;
}
pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);
pthread_mutex_destroy(&lock);
return 0;
}
Source [Link]
102
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
103
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
104
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
Exemple d’inversion de priorité
105
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
106
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
107
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
108
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
109
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
110
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Mutex
Mutex
Sémaphore binaire
Sommaire
4 Programmation multi-tâches
Le partage de ressources
Mutex
Sémaphores
Moniteurs
Timers & Signaux
111
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Un objet partagé, assimilable à un compteur, pouvant soit
être disponible (compteur ≥ 1) ou indisponible (0)
l’acquisition d’un sémaphore décrémente son compteur
la libération d’un sémaphore incrémente son compteur
la tâche bloque (en attente) si le compteur est à zéro lors
d’une tentative d’acquisition
un sémaphore binaire est un sémaphore dont le compteur
est limité à 1 (mutex)
Les fonctions principales d’un sémaphore en C :
▷ sem_init() créer un sémaphore
▷ sem_destroy() supprimer un sémaphore
▷ sem_wait() acquérir un sémaphore
▷ sem_post() libérer un séemaphore
Usage des sémaphores :
112
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
113
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Exemple de déclaration de sémaphores en C
...
bufferSize = 3;
bufferSize1 = 1;
pthread_mutex_t mutex;
sem_t sem1, sem2;
sem_init(&sem1,0,bufferSize1);
sem_init(&sem2,0,bufferSize);
...
void function(){
sem_wait(&sem1);
pthread_mutex_lock(&mutex);
...
pthread_mutex_unlock(&mutex);
sem_post(&sem1);
...
}
114
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Implémentation en C
115
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Implémentation en C
116
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Implémentation en C
117
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Implémentation en C
118
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphores
Implémentation en C
119
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphore
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define NUM_THREADS 10
sem_t semaphore;
Sémaphore
free(arg);
return NULL;
}
int main() {
pthread_t threads[NUM_THREADS];
Sémaphore
sem_destroy(&semaphore);
return 0;
}
122
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphore
Exemple 2 : Synchronisation
123
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphore
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
sem_t semaphore;
return NULL;
}
124
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Sémaphores
Sémaphore
void *task2(void *arg) {
// Wait for Task 1 to signal
sem_wait(&semaphore);
return NULL;
}
int main() {
pthread_t thread1, thread2;
Sémaphore
pthread_join(thread2, NULL);
return 0;
}
126
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Sommaire
4 Programmation multi-tâches
Le partage de ressources
Mutex
Sémaphores
Moniteurs
Timers & Signaux
126
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
127
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
Un moniteur encapsule :
les structures de données partagées
les procédures opérant sur ces structures de données
les mécanismes de synchronisation entre plusieurs appels
concurrents de procédures
Propriétés :
Un moniteur protège ses données des accès illégitimes
Il permet aux processus d’accéder à ces données de manière
définie à l’avance
Un moniteur garantit une exclusion mutuelle
Un seul processus peut exécuter une procédure d’un
moniteur à la fois
128
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
Si un autre processus souhaite exécuter une procédure en
train d’être exécutée par un autre processus, il bloque le
processus appelant
Un moniteur a une "file d’attente"
Si un processus utilisant des procédures d’un moniteur
passe en état d’attente, un autre processus peut solliciter
les procédures du même moniteur
Exemple :
withdraw(amount)
Monitor account { balance=balance-amount; // en cours
double balance; d’exécution
withdraw(amount); // en attente
double withdraw(amount){ withdraw(amount); // en attente
balance=balance-amount; return balance;
return balance; balance=balance-amount;
} return balance;
} balance=balance-amount;
return balance;
129
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
130
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
Exemple :
Monitor bounded_buffer {
Resource buffer[N]; Resource get_resource() {
// Variables for indexing buffer while (buffer array is empty)
Condition not_full, not_empty; wait(not_empty);
// Get resource R from buffer
void put_resource (Resource R) { array;
while (buffer array is full) signal(not_full);
wait(not_full); return R;
// Add R to buffer array; }
signal(not_empty); } // end monitor
}
131
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
Les processus peuvent être à différents niveaux d’un
moniteur
attendre de rentrer, attendre une variable conditionnelle,
être en train de l’exécuter, ...
Les variables conditionnelles sont différentes des sémaphores
Même si certains noms sont similaires
On peut utiliser un mécanisme pour implémenter l’autre
(sémaphores pour moniteurs ou vice versa)
Les différences au niveau de la procédure wait
▷ moniteur : le processus doit être à l’intérieur du moniteur
pour appeler wait
▷ sémaphore : le processus est uniquement bloqué dans la file
d’attente des processus
Les différences au niveau de signal
132
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
133
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
134
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Moniteurs
Moniteurs
pthread_cond_wait(¬_full, &mutex);
}
// Produce an item
buffer[count] = i;
printf("Produced: %d\n", i);
count++;
pthread_mutex_unlock(&mutex);
}
return NULL;
}
Moniteurs
while (count == 0) {
printf("Consumer waiting: buffer empty!\n");
pthread_cond_wait(¬_empty, &mutex);
}
// Consume an item
int item = buffer[--count];
printf("Consumed: %d\n", item);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main() {
pthread_t prod_thread, cons_thread;
Moniteurs
// Clean up
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(¬_empty);
pthread_cond_destroy(¬_full);
return 0;
}
137
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Timers & Signaux
Sommaire
4 Programmation multi-tâches
Le partage de ressources
Mutex
Sémaphores
Moniteurs
Timers & Signaux
137
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Timers & Signaux
Timers
Création d’un timer
Timers
Pour supprimer un timer
timer_delete(timer_t timerid);
Timers
timer_t timer_1, timer_2;
struct sigevent event_1, event_2;
struct itimerspec spec_1, spec_2;
// Allouer le timer
if (timer_create(CLOCK_REALTIME, &event_1, &timer_1) != 0) {
perror("timer_create");
exit(EXIT_FAILURE);
140
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Timers & Signaux
Timers
}
Timers
while (1)
pause();
return EXIT_SUCCESS;
}
142
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Timers & Signaux
Signaux
143
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Introduction Références Systèmes embarqués Systèmes temps réel
Timers & Signaux
144
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
144
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Historique
145
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Historique
L’e-mail de Linus
Historique
L’e-mail de Linus
I’ve currently ported bash (1.08) and gcc (1.40), and things
seem to work. This implies that I’ll get something practical
within a few months, and I’d like to know what features most
people would want. Any suggestions are welcome, but I won’t
promise I’ll implement them :-).
147
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Logiciel libre
Un logiciel est considéré libre si sa licence permet aux
utilisateurs des libertés suivantes :
d’utiliser le logiciel à des fins diverses et variées
d’analyser et modifier le logiciel,
de distribuer les copies du logiciel original et
de ses versions modifiées
Liberté d’utiliser ces logiciels à des fins commerciales et non
commerciales
Le code source du logiciel doit être mis à disposition
Adapté pour les systèmes embarqués
Qu’est-ce que c’est Linux embarqué ?
C’est l’utilisation du noyau Linux et de ses composantes
différentes dans les systèmes embarqués
148
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Linux embarqué
Avantages
Linux embarqué
Avantages
Linux embarqué
Avantages
151
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Processeurs
Architectures supportées
Processeurs
Architectures supportées
153
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
RAM et stockage
154
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Communication
155
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Introduction
Architecture globale
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
156
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Les composantes logicielles
157
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Les composantes logicielles
Linux embarqué
Versions commerciales
▷ MontaVista, Wind River ou TimeSys
▷ Outils de développement fournis (un mixte des outils open
source et propriétaires)
Version libre est la solution qui est généralement la plus
utilisée
Notre choix se porte également sur cette solution
158
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Les composantes logicielles
159
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Les composantes logicielles
160
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Les composantes logicielles
Hôte vs cible
Hôte (Host) - la station de développement
Cible (Target) - le système embarqué
Les deux systèmes sont souvent connectés par au moins un
moyen de communication : liaison série, ethernet, JTAG . . .
Communication série
un moyen de communication indispensable avec une
plateforme embarquée
Plusieurs outils de communication disponibles dépendant
du SE choisi pour le développement (HyperTerminal,
putty sous Windows)
Sous Linux : minicom, picocom, gtkterm, putty, . . .
Nous utiliserons minicom
▷ Installation : sudo yum install minicom
▷ Utilisation : sudo minicom -s
▷ Un menu permettant de le configurer et de choisir surtout le
port et la vitesse de communication
Les ports série sous Linux :
▷ ttyUSBx pour les port série via USB (x est le numéro du
port)
162
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Les composantes logicielles
Communication série
163
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
163
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
165
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
166
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
167
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
168
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
170
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Compilateur GCC
GNU Compiler Collection
Peut compiler du code C, C++, Ada, Fortran, Java,
Objective-C, Objective-C++ et générer du code pour une
large gamme d’architectures de processeurs (ARM, AVR,
Blackfin, MIPS, PowerPC, . . .)
[Link]
La licence GPL
172
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
La librarie C
Une composante essentielle d’un système Linux
▷ permet d’établir l’interface entre les applications utilisateur
et le noyau Linux (system calls)
▷ fournit l’interface C API pour faciliter le développement
d’application
Plusieurs libraries C sont disponibles :
glibc, uClibc, eglibc, dietlibc, newlib,...
Le choix de la library C est effectué au moment de la
génération de la chaîne de compilation croisée (gcc est lié à
la library C choisie)
Exemples :
Un programme "Hello World !" :
173
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
174
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
176
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Crosstool-NG
Installation et utilisation
Installation locale :
./configure enable-local
make
make install
Une liste de configurations existantes pour une variété
d’architecture de processeurs
./ct-ng list-samples
Pour charger une configuration simple
./ct-ng nom
Pour paramétrer une configuration :
./ct-ng menuconfig
Pour générer une configuration paramétrée :
./ct-ng build
177
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Crosstool-NG
Exercice d’installation
178
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Crosstool-NG
Exercice d’installation
// Options à choisir
Toolchain options
-> Tuple’s alias -> arm-linux-
C compiler
-> Décocher link libstdc++ statically into the gcc binary
Debug facilities
-> Décocher dmalloc, duma, ltrace et strace
-> Cocher gdb enabled
179
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Crosstool-NG
Exercice d’installation
//Lancer la compilation
./ct-ng build
//Décompresser l’archive
unzip [Link]
Crosstool-NG
Exercice d’installation
mv x-tools/ /home/student/
181
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Crosstool-NG
Exercice d’installation
182
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Chaîne de compilation
Crosstool-NG
Exercice d’installation
183
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
183
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
184
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
Exemple : ARM TI OMAP3
185
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
Exemple : architecture du SoC Sitara
Bootloader secondaire
U-Boot
Bootloader secondaire
U-Boot
188
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader secondaire
U-Boot
189
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader secondaire
U-Boot
190
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader secondaire
U-Boot
191
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader secondaire
U-Boot
192
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Qemu
Emulateur de matériel
Qemu
Emulateur de matériel
wget [Link]
qemu/demos/arm/directfb/1.0/vmlinuz-qemu-arm-2.6.20
Démarrer l’image téléchargée avec la commande suivante :
qemu-system-arm -M versatilepb -m 16 -kernel ←-
vmlinuz-qemu-arm-2.6.20 -append "clocksource= ←-
pit quiet rw"
L’option -M correspond au type de carte émulée
L’option -m indique l’espace mémoire vive alloué à
l’émulation
L’option -append permet de passer des paramètres au
noyau
Lancer la démo disponible sur la plateforme utilisant un
framebuffer :
194
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Qemu
Emulateur de matériel
run_demo
Pour quitter la démo Ctrl+Q
195
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
U-Boot : configuration et installation
//Télécharger le U-Boot
wget [Link]
//Décompresser l’archive
tar xjf [Link].bz2
cd u-boot-2015.01
196
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
U-Boot : configuration et installation
//Install qemu-system-arm
sudo yum install qemu-system-arm
//Démarrer le U-Boot
qemu-system-arm -M versatilepb -nographic -kernel u-boot
//Faire un tour des options proposées par U-Boot
printenv
print <nom_de_variable>
setenv <nom_de_variable> <valeur>
editenv <nom_de_variable>
saveenv
197
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
U-Boot : configuration et installation
198
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Bootloader
Bootloader
U-Boot : configuration et installation
199
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
199
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
200
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
201
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
Les rôles principaux du noyau Linux :
manager les ressources matérielles
fournir des API (Application Programming Interface) pour
les applications utilisateur
manager les accès concurrents aux ressources matérielles
depuis des applications différentes
→ Un exemple typique est l’interface réseau qui est partagé
entre plusieurs applications utilisateur par le noyau
Nous distinguons deux espaces programmes différents :
▷ l’espace utilisateur et
▷ l’espace noyau
Les échanges de données entre ces deux espaces s’effectuent
via les appels dits systèmes
202
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
203
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
204
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
205
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
206
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
Avant de compiler un noyau Linux, il faut le configurer
pour une plateforme matérielle
La configuration pour une plateforme matérielle choisie est
stockée dans .config dans le dossier racine
Il s’agit d’un fichier text sous forme key=value
Pour configurer un noyau linux, il y a plusieurs solutions :
▷ make menuconfig - textuel
▷ make xconfig - graphique
Le résultat d’une compilation de noyau réussie est un fichier
image dans le dossier boot/
Lors du processus de configuration d’un noyau linux, il y a
plusieurs choix : Y, N ou M
▷ Y - oui
▷ N - non
207
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
▷ M - module
Un module est une partie compilée ne se chargeant pas au
démarrage avec le noyau. Il peut être chargé ultérieurement
▷ L’utilité des modules est dans le développement de pilotes
pour du matériel
▷ Sous linux, on peut charger un pilote sans redémarrer le
système
▷ L’intérêt principal des modules est d’alléger au maximum le
noyau Linux qui sera chargé au démarrage
▷ Les périphériques qui ne seront pas utilisés au démarrage
peuvent être démarrés ultérieurement
▷ Les modules sont uniquement chargés/déchargés en mode
root pour éviter les erreurs graves
▷ Une fois un système linux démarré, on peut vérifier à tout
moment les états des modules chargés
Pour ce faire, il suffit d’utiliser la commande dmesg
208
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
209
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
Pour une compilation croisée, une large variété de
configuration existent dans arch/<arch>/configs/
où <arch> est l’architecture choisie (par exemple arm)
Une fois le noyau compilé, un certain nombre de paramètres
peut être transmis via la ligne de commande du noyau
▷ root= précise le système de fichiers utilisé
▷ console= précise sur quel support les messages de
démarrage du noyau seront affichés
Cette ligne de commande est soit passée par le bootloader
secondaire soit directement intégrée dans le noyau avec
l’option CONFIG_CMDLINE
A la fin, on peut installer les modules avec
make ARCH=arm modules_install
210
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
211
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
Configuration et compilation
Le noyau Linux
Configuration et compilation
213
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
Configuration et compilation
214
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Le noyau Linux
Le noyau Linux
Configuration et compilation
// Booter le noyau
bootm
215
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
215
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
Introduction
Système de fichiers
Introduction
217
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
Introduction
218
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
Introduction
Système de fichiers
Introduction
Système de fichiers
Introduction
221
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
NFS - configuration et utilisation
222
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
NFS - configuration et utilisation
//Compilation
223
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
NFS - configuration et utilisation
224
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichier
initramfs
225
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichier
initramfs
226
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichier
initramfs
Documentation/filesystems/[Link]
227
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Système de fichiers
Organisation
Système de fichiers
Organisation
229
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Devices
Introduction
Devices
Introduction
231
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Système de fichiers
Devices
Introduction
int fd;
fd = open("/dev/ttyS0", O_RDWR);
write(fd, "Hello", 5);
close(fd);
232
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Sommaire
5 Linux embarqué
Introduction
Les composantes logicielles
Chaîne de compilation
Bootloader
Le noyau Linux
Système de fichiers
Busybox
232
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
234
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
235
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
236
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Busybox
Introduction
Les programmes de base d’un systèmes Linux de base :
▷ init
▷ une interface shell
▷ un certain nombre de programmes pour la manipulation des
fichiers
Dans un système Linux, ces programmes sont fournis par
différents packages
Dans un système embarqué, busybox est une alternative
fournissant tous les programmes dans un seul package
Tous les programmes exécutables sont compilés dans un
seul exécutable nommé /bin/busybox
La taille du programme compilé en statique avoisine 1Mo
(avec la library glibc)
[Link]
237
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Busybox
Configuration et installation
// Décompresser l’archive
tar xjfv [Link].bz2
// Configurer busybox
make gconfig
238
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Busybox
Configuration et installation
// à mettre
arm-unknown-linux-gnueabi-
export PATH=/home/student/x-tools/arm-unknown-linux-gnueabi/bin:$PATH
// Compiler le busybox
make ARCH=arm CROSS_COMPILE=arm-unknown-linux-
239
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Busybox
Configuration et installation
make install
240
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Programmes de base
serveur et client ssh
241
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Busybox
Linux embarqué
La suite
Linux embarqué
La suite
243
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Sommaire
243
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
245
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
246
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Linux RT
2 modèles de préemption
▷ CONFIG_PREEMPT_VOLUNTARY
→ Une rapidité de réponse améliorée
▷ CONFIG_PREEMPT
→ Toute section du code noyau peut être préemptée
→ A l’exception, les sections du code noyau délimitées par
spinlocks
La résolution des timers utilisée peut également être
améliorée
▷ 100Hz ou 250Hz sont les valeurs habituelles
247
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Linux RT
▷ Cela donne une résolution de l’ordre de la ms
Utilisation des timers de haute résolution
▷ Basé sur l’utilisation de timers matériels
▷ Un seul timer matériel peut être multiplexé pour gérer
plusieurs timers logiciels dérivés
▷ Facilité d’utilisation via les API fournis
Linux RT
249
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Utilisation de Linux RT
Pas de libraries spécifiques à utiliser
L’API temps réel respectant le standard POSIX fait déjà
partie de la library standard C
Utiliation des libraries glibc ou eglibc est recommandée
→ un certain nombre d’options temps réel n’est pas fourni
avec la library uClibc
Pour compiler un programme
arm-unknown-linux-gnueabi-gcc -o prog prog.c -lrt
Pour obtenir la documentation détaillée sur l’API POSIX
▷ il faut installer le package sudo yum install man-pages
▷ Pour trouvers des informations supplémentaires sur une
fonction donnée function_name
man function_name
250
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
251
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
252
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
253
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
254
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
255
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#define MAX_COUNT 100
#define BUF_SIZE 100
void main(void)
{
pid_t pid;
int i;
char buf[BUF_SIZE];
fork(); // création d’un processus fils
pid = getpid();
for (i = 1; i <= MAX_COUNT; i++) {
sprintf(buf, "Cette ligne est générée par le pid %d, et
valeur = %d\n", pid, i);
write(1, buf, strlen(buf));
}
}
256
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process
Exemple
Process
Exemple
258
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process vs Thread
Définitions et différences
Process vs Thread
Définitions et différences
260
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Process vs Thread
Définitions et différences
261
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Thread
Création
262
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Thread
Exemple
// Fonctions
void* func1( void *ptr )
{
printf("Hello world");
return NULL; }
...
263
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Thread
Exemple
return 0; }
264
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Thread
Exemple 1
La fonction factorielle
void * factorielle(void * arg)
{
int i;
int n = (int) arg;
int resultat = 1;
for (i = 2; i <= n; i ++) {
resultat = resultat * i;
fprintf(stderr, "%d! : en calcul...\n", n);
sleep(1);
}
return (void *) resultat;
}
265
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Thread
Exemple 1
Thread
Exemple 1
267
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Thread
Exemple 1
268
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
while (1) {
n=sched_getcpu();
if (precedent == -1)
precedent = n;
if (n != precedent) {
269
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
heure = time(NULL);
tm_heure = localtime(& heure);
fprintf(stdout, "%02d:%02d:%02d migration %d -> %d\n",
tm_heure->tm_hour, tm_heure->tm_min, tm_heure->tm_sec,
precedent, n);
precedent = n;
}
}
return EXIT_SUCCESS;
}
270
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
271
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Timer Unix classique - exemple
272
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Timer Unix classique - exemple
273
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Timers Posix - exemple
signal(SIGRTMIN + 2, handler_signal_2);
274
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Timers Posix - exemple
spec_1.it_value = spec_1.it_interval;
// Allouer le timer
if (timer_create(CLOCK_REALTIME, &event_1, &timer_1) != 0) {
perror("timer_create");
exit(EXIT_FAILURE);
}
275
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Timers Posix - exemple
Tâches périodiques
Précision - exemple
277
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
timer_delete(timer);
}
278
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
perror("calloc");
exit(EXIT_FAILURE);
}
// Configurer le timer
signal(SIGRTMIN, handler_signal);
event.sigev_notify = SIGEV_SIGNAL;
event.sigev_signo = SIGRTMIN;
periode = periode * 1000; // en nanosec
spec.it_interval.tv_sec = periode / 1000000000;
spec.it_interval.tv_nsec = periode % 1000000000;
spec.it_value = spec.it_interval;
// Allouer le timer
if (timer_create(CLOCK_REALTIME, & event, & timer) != 0) {
perror("timer_create");
exit(EXIT_FAILURE);
}
// Programmer le timer
if (timer_settime(timer, 0, &spec, NULL) != 0) {
279
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
perror("timer_settime");
exit(EXIT_FAILURE);
}
// Attendre le dernier signal
while (nb_mesures < nb_total_mesures)
pause();
// Afficher les mesures en micro-secondes
for (nb_mesures = 0; nb_mesures < nb_total_mesures; nb_mesures ++)
printf("%ld\n", mesure[nb_mesures]/1000);
return EXIT_SUCCESS;
}
280
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
992
989
998
1003
997
1007
999
1001
996
993
1008
996
998
1013
994
1013
996
1021
963
281
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
1009
998
1006
981
1005
1002
1006
993
1010
1030
955
993
1031
968
1027
972
1028
998
1004
282
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
968
1030
1002
982
993
1015
1014
963
1001
1027
975
1029
971
996
1013
985
997
1017
984
283
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
1000
1017
997
1010
985
989
1008
1037
958
1003
997
1000
997
1001
999
999
1007
994
999
284
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
997
1005
996
1003
999
997
...
Les stats calculées :
Nb mesures = 5000
Minimum = 47
Maximum = 2754
Moyenne = 1000
Ecart-type = 53
285
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
Tâches périodiques
Précision - exemple
Nb mesures = 5000
Minimum = 2
Maximum = 5310
Moyenne = 1002
Ecart-type = 113
286
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
287
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
288
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
289
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
290
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
int main(void)
{
printf("SCHED_FIFO : [%d - %d]\n",
sched_get_priority_min(SCHED_FIFO),
sched_get_priority_max(SCHED_FIFO));
printf("SCHED_RR : [%d - %d]\n",
sched_get_priority_min(SCHED_RR),
sched_get_priority_max(SCHED_RR));
printf("SCHED_OTHER : [%d - %d]\n",
sched_get_priority_min(SCHED_OTHER),
sched_get_priority_max(SCHED_OTHER));
return EXIT_SUCCESS;
}
291
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
SCHED_FIFO : [1 - 99]
SCHED_RR : [1 - 99]
SCHED_OTHER : [0 - 0]
292
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
int main(void)
{
int nb_cpus = sysconf(_SC_NPROCESSORS_ONLN);
int cpu;
293
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
294
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Linux embarqué
Systèmes temps réel
295
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Références Références
Références
296
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Références Références
Références
297
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26
Références Références
Références
298
Slaviša Jovanović & Hassan Rabah • M2 - EEA • Systèmes embarqués temps réel • 2025/26