Changes between Version 78 and Version 79 of SoclibCourseTp3


Ignore:
Timestamp:
Dec 6, 2013, 12:32:37 PM (11 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp3

    v78 v79  
    8383}}}
    8484
     85Vous pouvez vous faire une copie privée de ces fichiers pourpouvoir les consulter plus facilement, mais il est fortement déconseillé d'utiliser
     86cette 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
    8588== 3.2 Génération du code ==
    8689
     
    9194== 3.3 Chargement du code ==
    9295
    93 Il existe deux méthodes permettant de charger le code binaire dans les mémoires embarquées sur la puce:
     96Il existe deux méthodes permettant de charger le code binaire dans les mémoires embarquées du MPSoC:
    9497 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.
    9598 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.
     
    152155Le répertoire '''soft''' de l'archive qui vous est fournie contient les fichiers spécifiques à l'application embarquée :
    153156
    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.
    157160
    158161 * 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''.
     
    173176}}}
    174177
    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
     180C'est le code de boot qui réalise le branchement vers la première instruction de l'application grâce à l'instruction ''eret''.
     181On 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
     183Le 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'''.
     184Ces 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
     187l'application?  Complétez le fichier '''reset.s''' pour initialiser le registre EPC.
     188
     189La 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
     193Le 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
     197Le 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.
    183198
    184199'''Question''' : Complétez le fichier '''seg_ld''' pour définir les adresses de base des différents segments.
     
    186201Lancez 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.
    187202
    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''.
    191204
    192205== 4.3 Description de l'architecture matérielle ==
     
    200213'''Question''' : Parmi les 9 segments utilisés dans cette l'architecture, lesquels doivent être non-cachables ?
    201214
    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.
    204216
    205217'''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.
     
    300312}}}
    301313
    302 Il daut ensuite lancer la génération du simulateur avec la commande:
     314Il faut enfin lancer la génération du simulateur avec la commande:
    303315
    304316{{{