Changes between Version 78 and Version 79 of SoclibCourseTp3
- Timestamp:
- Dec 6, 2013, 12:32:37 PM (11 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp3
v78 v79 83 83 }}} 84 84 85 Vous pouvez vous faire une copie privée de ces fichiers pourpouvoir les consulter plus facilement, mais il est fortement déconseillé d'utiliser 86 cette copie locale pour générer le code binaire, le code du GIET peut évoluer, et il faut toujours utiliser la version de référence. 87 85 88 == 3.2 Génération du code == 86 89 … … 91 94 == 3.3 Chargement du code == 92 95 93 Il existe deux méthodes permettant de charger le code binaire dans les mémoires embarquées sur la puce:96 Il existe deux méthodes permettant de charger le code binaire dans les mémoires embarquées du MPSoC: 94 97 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. 95 98 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. … … 152 155 Le répertoire '''soft''' de l'archive qui vous est fournie contient les fichiers spécifiques à l'application embarquée : 153 156 154 * 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 '''soft/config.h'''.155 156 * le fichier '''reset.s''' est écrit en assembleur et contient le code de boot qui est exécuté à la mise sous tension, ou lors de l'activation du signal NRESET. Ce code s'exécute en mode ''kernel'', mais il est spécifique à chaque plate-forme matérielle, car il est chargé d'initialiser les périphériques présents dans l'architecture. 157 * 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 sont définis dans le fichier '''soft/config.h'''. 158 159 * le fichier '''reset.s''' est écrit en assembleur et contient le code de boot qui est exécuté à la mise sous tension, ou lors de l'activation du signal NRESET. Ce code s'exécute en mode ''kernel'', mais il est spécifique à chaque plate-forme matérielle, car il est chargé d'initialiser les périphériques présents dans l'architecture. Il variera donc d'un TP à l'autre. 157 160 158 161 * 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''. … … 173 176 }}} 174 177 175 '''Question''' : Editez le fichier ''reset.s'', de façon à définir la taille du segment de pile. On choisira une taille de 64 Koctets. Quelles sont les autres initialisations réalisées par le code de boot ? 176 177 On rappelle que l'instruction ''eret'' de sortie du GIET modifie le registre protégé SR (registre 12 du coprocesseur ''système'') pour que le processeur retourne dans le mode ''user'' et effectue un branchement à l'adresse contenue dans le registre protégé EPC (registre 14 du coprocesseur ''système''). 178 179 '''Question''' : Ouvrez le fichier ''main.c''. Que fait ce programme ? (La fonction ''tty_getc()'' est bloquante, et ne rend pas la main tant qu'un caractère n'a pas été saisi au clavier). 180 181 '''Question''' : Editez le fichier ''stdio.c'' contenu dans le répertoire ''/users/cao/alain/ue_almo/soft/giet''. 182 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? 178 '''Question''' : Editez le fichier '''reset.s''', de façon à définir la taille du segment de pile. On choisira une taille de 64 Koctets. 179 180 C'est le code de boot qui réalise le branchement vers la première instruction de l'application grâce à l'instruction ''eret''. 181 On rappelle que l'instruction ''eret'' modifie le registre protégé SR (registre 12 du coprocesseur ''système'') pour que le processeur retourne dans le mode ''user'' et effectue un branchement à l'adresse contenue dans le registre protégé EPC (registre 14 du coprocesseur ''système''). 182 183 Le code de boot fait partie du code système et il est donc défini dans le fichier '''sys.bin'''. Le code de l'application est défini dans le fichier '''app.bin'''. 184 Ces deux fichiers sont générés de façon indépendante, et il faut donc définir un mécanisme permettant au code de boot de déterminer l'adresse de la première instruction de l'application (point d'entrée dans le code utilisateur). 185 186 '''Question''' : quelle est la convention utilisée par le GIET pour permettre au code de boot de déterminer l'adresse de la première instruction de 187 l'application? Complétez le fichier '''reset.s''' pour initialiser le registre EPC. 188 189 La première application proposée affiche simplement un message sur le terminal TTY. 190 191 '''Question''' : Ouvrez le fichier '''main.c'''. Que fait ce programme ? (La fonction ''tty_getc()'' est bloquante, et ne rend pas la main tant qu'un caractère n'a pas été saisi au clavier). 192 193 Le fichier '''stdio.c''' contient l'ensemble des appels systèmes fournis par le GIET aux applications. 194 195 '''Question''' : Editez le fichier '''stdio.c''' contenu dans le répertoire de référence du GIET. Quels sont les appels système qui permettent d'accéder à un terminal TTY ? Que trouve-t-on dans le code de chacun de ces appels système? 196 197 Le fichier '''seg.ld''' est inclus dans les deux fichier '''sys.ld''' et '''app.ld''', et définit les adresses de base de tous les segments pour le logiciel. 183 198 184 199 '''Question''' : Complétez le fichier '''seg_ld''' pour définir les adresses de base des différents segments. … … 186 201 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. 187 202 188 '''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? 189 190 '''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? 203 '''Question''' : Editez le fichier ''app.bin.txt''. Combien d'instructions assembleur ont été générées pour le programme main? Vérifiez que l'adresse du point d'entrée dans le programme utilisateur est bien rangée au début du segment ''seg_data''. 191 204 192 205 == 4.3 Description de l'architecture matérielle == … … 200 213 '''Question''' : Parmi les 9 segments utilisés dans cette l'architecture, lesquels doivent être non-cachables ? 201 214 202 '''Question''' : Définissez l'argument du composant ''loader'' qui réalise le chargement du code binaire dans les mémoires ROM et RAM. Cet argument est une chaîne de caractères définissant le cheminom d'accès au fichier ELF. 203 Ce cheminom a comme valeur par défaut ''soft/bin.soft'', mais il est possible de le redéfinir au lancement du simulateur gràce à un argument sur la ligne de commande. 215 '''Question''' : Définissez l'argument du composant ''loader'' qui réalise le chargement du code binaire dans les mémoires ROM et RAM. Cet argument est une liste de chaînes de caractères définissant les cheminoms des différents fichiers ELF contenant du code binaire à charger en mémoire. 204 216 205 217 '''Question''' : Définissez les arguments des constructeurs des composants matériels instanciés, ainsi que les valeurs de leurs paramètres template. Vous devez consulter la documentation des composants !VciXcacheWrapper et !VciSimpleRam pour comprendre la signification des arguments. On choisira des caches à correspondance directe (c'est à dire un seul niveau d'associativité), ayant une capacité totale de 4 Koctets et des lignes de caches d'une longueur de 16 octets. … … 300 312 }}} 301 313 302 Il daut ensuitelancer la génération du simulateur avec la commande:314 Il faut enfin lancer la génération du simulateur avec la commande: 303 315 304 316 {{{