Cours # 1 ELE784 - Ordinateurs et programmation système 1
Cours #2
Amorçage du système
ELE-674
Systèmes embarqués avancés
Bruno De Kelper
Site internet :
http://www.ele.etsmtl.ca/academique/ele674/
Cours # 2 1ELE674 – Systèmes embarqués avancés
2
Plan d’aujourd’hui
1. Amorçage d’un système
1. Démarrage du CPU
2. Démarrage sur un PC
3. Démarrage sur un système embarqué
4. Partie OS de l’amorçage
2. Conception du système
1. Survol des composantes du système
2. Chargeur d’amorçage (BootLoader)
3. Noyau du système d’exploitation
4. Système de fichiers
3. Outils de conception du système
1. Émulation avec QEMU
2. Conception du système avec BuildRoot
Cours # 2 2ELE674 – Systèmes embarqués avancés
Cours # 1 ELE784 - Ordinateurs et programmation système 2
Amorçage d’un système
??
???
Flash
RAM
Alimentation
Port série
Port USB
Ethernet
?
ROM
Celle-ci contient un peu
de code qui permet de
commencer l’initialisation
du système
Lorsque l’alimentation
est appliquée, le CPU
se réveille sans rien
connaitre de son
environnement.
La seule chose qu’il
connait est sa ROM
interne.
1.1 - Démarrage du CPU
Cours # 2 3ELE674 – Systèmes embarqués avancés
Amorçage d’un système
BIOS ou équivalent
Initialise les composantes du système, tels que les
contrôleurs :
RAM, interruptions, bus PCI,
Fournit un pilote de base pour le Disque Dur.
Se charge en mémoire
Démarre le chargement du « BootLoader » :
Pour finir, le BIOS se met en mode « service ».
BootLoader
Peut être d’assez
grosse dimension
Beaucoup de l’environnement
du CPU est connu d’avance
Sert essentiellement à démarrer l’OS et disparait ensuite
Linux GRUB, LILO, …
Windows NTLDR, …
1.2 - Démarrage sur un PC
Cours # 2 4ELE674 – Systèmes embarqués avancés
Cours # 1 ELE784 - Ordinateurs et programmation système 3
Amorçage d’un système
ROM code
Initialise quelques composantes essentielles du CPU :
Horloge, Mémoire-interne, Périphériques de base
Cherche un dispositif contenant un BootLoader valide.
Charge le BootLoader trouvé en mémoire-interne :
Pour finir, le ROM code se retire du système.
BootLoader
Le CPU « saute » à une
adresse bien précise de
la ROM
L’environnement du CPU est très
variable, d’un système à un autre
Fait le gros de l’initialisation du système :
Bus, cache et Mémoire externe
Principaux périphériques du système
Interruptions, …
Charge et décompresse l’OS en mémoire
Son travail fait, le BootLoader disparait du système
Linux RedBoot, Yamon, Grub, LILO, U-Boot, …
ROM-interne assez petite
(initialisée par le fabricant)
U-Boot
Linux + (ARM, PowerPC)
NAND, NOR
SD Flash
1.3 - Démarrage sur un système embarqué
Cours # 2 5ELE674 – Systèmes embarqués avancés
Amorçage d’un système
Boot
Loader
Système
fonctionnel Noyau Init Système
prêt
RootFS
Monte
Initialise
paramètres
de
démarrage
Finalise l’initialisation tel
que le MMU (virtualisation
de la mémoire), …
Récupère, décompresse et
installe le RootFS.
Exécute « linuxrc », démarre
les pilotes et les Daemons.
Démarre la 1ière tâche : INIT
Le 1er RootFS provient d’un fichier « initrd »
Système de fichier « initramfs »
chargé dans un « RAM Disk »
Ce RootFS contient :
Fichiers des modules et pilotes du système
Fichiers des librairies et de configurations
Outils, logiciels, …
Surtout, le RootFS permet la « virtualisation » du
système voir les composantes du système
comme des « fichiers virtuels »
1
2
3
4
1.4 - Partie OS de l’amorçage
Cours # 2 6ELE674 – Systèmes embarqués avancés
Cours # 1 ELE784 - Ordinateurs et programmation système 4
Conception du système
2.1 - Survol des composantes du système
RootFS
Noyau
Boot
Loader
Choisir un BootLoader
Configurer le BootLoader
Compiler le BootLoader
Choisir un emplacement de stockage
U-Boot
Datasheet
Toolchain NAND, SD,
UART, USB
Choisir un Noyau
Configurer le Noyau
Compiler le Noyau
Choisir un emplacement de stockage
Linux
Requis du système
Toolchain NAND, SD,
UART, USB,
NFS
Choisir un emplacement de montage
Choisir un type de RootFS
Configurer et peupler le RootFS
NAND, SD,
NFS, RAM
Requis du système
Linux
Cours # 2 7ELE674 – Systèmes embarqués avancés
Conception du système
2.2 - Chargeur d’amorçage
Le rôle du chargeur d’amorçage (BootLoader) est de rendre le système
suffisamment fonctionnel pour que d’autres programmes puissent être exécutés.
Au démarrage, le CPU est dans un état prédéfini et commence son exécution à
une adresse bien précise dans la mémoire permanente du système.
Aucunes des composantes du système ne sont fonctionnelles, y compris la
mémoire RAM, et c’est le rôle du BootLoader de leur « insuffler la vie ».
2.2.1 - Rôle et défis d’un chargeur d’amorçage
Cours # 2 8ELE674 – Systèmes embarqués avancés
Rôle :
Au début de son exécution, le BootLoader n’a pas accès ni à de la mémoire RAM
pour stocker ses données, ni à une pile.
Une 1re tâche du BootLoader est de rendre disponible la mémoire RAM et la pile,
en initialisant correctement le contrôleur de DRAM et en configurant le CPU.
Sa 2ième tâche importante est de se copier lui-même dans la mémoire RAM, afin de
poursuivre son exécution plus aisément.
Finalement, le BootLoader doit récupérer le Noyau, selon l’emplacement où celui-
ci se trouve, le décompresser et l’installer dans la mémoire RAM.
Défis :
Cours # 1 ELE784 - Ordinateurs et programmation système 5
Conception du système
2.2 - Chargeur d’amorçage
Souvent, le chargeur d’amorçage (BootLoader) est fournit par le fabricant de la
plateforme de développement utilisée.
Par contre, si celui-ci est bien adapté pour l’architecture matérielle de la
plateforme de développement, il ne l’est pas nécessairement pour un système
personnalisé.
Dans la plupart des cas, un BootLoader doit être choisit et adapté à un Design
spécifique de système embarqué.
De nombreux BootLoader sont disponibles, tant commercialement que
publiquement (à code ouvert).
De ceux-ci, certainement le plus populaire pour les projets basés sur Linux est
Das U-Boot, communément appelé U-Boot, de Wolfgang Denk (DENX Software
Engineering).
À la base, U-Boot a été développé spécifiquement pour les systèmes embarqués
basé sur les ARM et PowerPC, mais supporte maintenant une vaste gamme de
processeurs.
2.2.2 - Choix d’un chargeur d’amorçage
Cours # 2 9ELE674 – Systèmes embarqués avancés
Conception du système
2.2 - Chargeur d’amorçage
U-Boot est disponible à partir de plusieurs sources, dont la principale est :
http://www.denx.de/wiki/U-Boot
Outre sa grande popularité pour les systèmes embarqués basés sur Linux, U-Boot
a les avantages suivants :
2.2.3 - Chargeur d’amorçage U-Boot
Est très configurable
Est capable d’amorcer un Noyau à
partir de différentes sources :
Supporte une vaste gamme de
systèmes de fichiers :
Fournit un interpréteur de
commandes (shell)
Bien documenté
Supporté par une large communauté
Support pour une vaste gamme de
processeurs :
Fournit une riche gamme de
commandes
TFTP IDE SCSI UART
USB NAND NOR SD
Cramfs ext2 FAT
JFFS2 …
ARM AVR32 Blackfin
Motorola 68K Microblaze
Xilinx MIPS NIOS
NIOS2 PowerPC Super-H
Cours # 2 10ELE674 – Systèmes embarqués avancés
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !