Changes between Version 75 and Version 76 of SoclibCourseTp3
- Timestamp:
- Dec 5, 2013, 8:16:52 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp3
v75 v76 91 91 Le résultat de la compilation consiste en deux fichiers binaire au format ELF, '''sys.bin''' et '''app.bin''', qui devront être chargés dans les mémoires embarquées du MPSoC. 92 92 93 == 3. 2Chargement du code ==93 == 3.3 Chargement du code == 94 94 95 95 Il existe deux méthodes permettant de charger le code binaire dans les mémoires embarquées sur la puce: 96 96 1. Le code peut être stocké dans des mémoires mortes (ROM). Le contenu de ces mémoires est défini lors de la fabrication de la puce, et n'est plus modifiable. Cette approche est évidemment très peu flexible, et elle n'est généralement utilisée que pour le code de boot. 97 1. Le code peut être stocké dans des mémoires inscriptibles (SRAM), qui sont chargées lors de la mise sous tension du système à partir d'un périphérique de stockage externe (cela peut être une EPROM externe, une mémoire flash, ou un autre dispositif de stockage. On peut même imaginer qu'on utilise une liaison sans fil pour télécharger du code applicatif disponible sur un serveur distant. Cette approche en deux temps est utilisée pour le code applicatif, mais également pour le système d'exploitation embarqué. C'est pourquoi on appelle souvent ''bootloader'' le code de bootqui effectue ce chargement.97 1. Le code peut être stocké dans des mémoires inscriptibles (SRAM), qui sont chargées lors de la mise sous tension du système à partir d'un périphérique de stockage externe (cela peut être une EPROM externe, une mémoire flash, ou un autre dispositif de stockage. On peut même imaginer qu'on utilise une liaison sans fil pour télécharger du code applicatif disponible sur un serveur distant. Cette approche en deux temps est utilisée pour le code applicatif, mais également pour le système d'exploitation embarqué. C'est pourquoi on appelle souvent ''bootloader'' le code de démarrage qui effectue ce chargement. 98 98 99 99 La phase de chargement du système d'exploitation et du code applicatif est en pratique exécutée à chaque mise sous tension, … … 150 150 1. Pour le logiciel, les adresses de base des segments doivent être définies dans le fichier ''soft/seg.ld'' qui contient les directives pour l'éditeur de liens lors de la compilation du logiciel embarqué. 151 151 152 Par ailleurs le GIET peut supporter des architectures comportant plusieurs processeur, mais les structures de données utilisées par le système doivent être dimensionnées en fonction du nombre de processeurs et du nombre de tâches parallèles. Ces paramètres doivent donc être définies dans le fichier '' tp"_top.cpp'' et dans le fichier ''soft/config.h''.152 Par ailleurs le GIET peut supporter des architectures comportant plusieurs processeur, mais les structures de données utilisées par le système doivent être dimensionnées en fonction du nombre de processeurs et du nombre de tâches parallèles. Ces paramètres doivent donc être définies dans le fichier '''tp"_top.cpp''' et dans le fichier '''soft/config.h'''. 153 153 154 154 == 4.1 Compilation du logiciel embarqué == … … 160 160 * le fichier '''main.c''' est écrit en C et contient le code de l'application logicielle. Il utilise les appels système définis dans le fichier ''stdio.c''. 161 161 162 * le fichier '''ldscript''' contient les directives pour l'éditeur de liens, et en particulier les adresses de base des différents segments, ainsi que certains paramètres de la plate-forme matérielle tels que le nombre de processeurs ou de terminaux TTY.162 * les fichiers '''sys.ld''', app.ld''', et '''seg.ld''' contiennent les directives pour l'éditeur de liens, et en particulier les adresses de base des différents segments, ainsi que certains paramètres de la plate-forme matérielle tels que le nombre de processeurs. 163 163 164 164 * le fichier '''Makefile''' permet de lancer la génération du logiciel embarqué. 165 165 166 La génération du code binaire embarqué est totalement indépendante de la génération du simulateur de l'architecture matérielle. Lachaîne de compilation croisée GCC fournit quatre outils:166 La chaîne de compilation croisée GCC fournit quatre outils: 167 167 * mipsel-unknown-elf-gcc : '''compilateur''', pour transformer un fichier source C (extension .c) en fichier assembleur pour MIPS32 (extension .s) 168 168 * mipsel-unknown-elf-as : '''assembleur''', pour transformer un fichier assembleur (extension .s) en fichier binaire objet (extension .o) … … 184 184 Quels sont les appels système qui permettent d'accéder à un terminal TTY ? Que trouve-t-on dans le code de ces appels système? 185 185 186 '''Question''' : Complétez le fichier '''ldscript''' pour définir les adresses de base des différents segments, ainsi que les paramètres NB_PROCS et NB_TTYS. 187 188 Lancez l'exécution du Makefile dans le répertoire ''soft''. Deux fichiers ''bin.soft'' et ''bin.soft.txt'' doivent être créés : 189 Le fichier ''bin.soft'' contient le code binaire au format ELF, et le fichier ''bin.soft.txt'' contient un version desassemblée (donc lisible) de ce code binaire. 190 191 '''Question''' : Editez le fichier ''bin.soft.txt''. Combien d'instructions assembleur ont été générées pour le programme main? Dans quelle section est rangée la chaîne de caractère ''Hello world !'' ? 186 '''Question''' : Complétez le fichier '''seg_ld''' pour définir les adresses de base des différents segments. 187 188 Lancez l'exécution du Makefile dans le répertoire ''soft''. Quatre fichiers doivent être créés: '''app.bin''' et '''sys.bin''' contiennent le code binaire au format ELF, et les fichier '''app.bin.txt'' et '''sys.bin.txt''' contiennent une version desassemblée (donc lisible) de ce code binaire. 189 190 '''Question''' : Editez le fichier ''app.bin.txt''. Combien d'instructions assembleur ont été générées pour le programme main? quelle est l'adresse du point d'entrée dans le programme utilisateur? 191 192 '''Question''' : Comment le code de boot (résultant de la compilation du fichier '''reset.s''' obtient-il l'adresse du point d'entrée dans le code utilisateur? 192 193 193 194 == 4.2 Description de l'architecture matérielle == … … 354 355 Pour introduire un peu d'interactivité dans cet exercice, vous pouvez introduire dans la boucle 355 356 un appel à la fonction ''tty_getc()'' qui lit un caractère au clavier, et bloque l'exécution du programme 356 tant que le caractère n'est pas saisi. 357 énération du code système (fichier '''sys.bin''') est indépendante de la compilation du code utilisateur 358 (fichier '''app.bin'''). embarqué est totalement indépendante de la génération du simulateur de l'architecture matérielle. tant que le caractère n'est pas saisi. 357 359 358 360 = 5 Compte-rendu =