Changes between Version 45 and Version 46 of SoclibCourseTp3


Ignore:
Timestamp:
Nov 28, 2010, 8:15:05 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp3

    v45 v46  
    131131== 4.2 Compilation du logiciel embarqué ==
    132132
    133 Le logiciel embarqué est défini dans deux types de fichiers:
    134  * Les fichiers définissant le code du système d'exploitation sont stockés dans le répertoire /
    135  * fichiers spécifiques à chaque application embarquée.
    136 
    137 Les fichiers c
    138 plusieurs fichiers source, que vous trouverez dans le répertoire ''soft''.
     133Le logiciel embarqué est défini dans deux types de fichiers.
     134
     135Vous pouvez consulter le code source générique du système d'exploitation dans le répertoire '''/users/cao/alain/ue_almo/soft/giet'''.
    139136Certains de ces fichiers sont écrits en assembleur Mips32, certains sont écrits en C :
    140  * 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'' et initialise quelques registres, avant de se brancher à la pemière instruction du programme ''main'', et en forçant le processeur à passer en mode ''user'' gràce à l'instruction ''eret''.
     137
    141138 * le fichier '''giet.s''' est écrit en assembleur et contient le code du Gestionnaire d'Interruption, Exceptions et Trappes. Le GIET est l'unique point d'entrée dans le système d'exploitation. Ce code s'exécute en mode ''kernel'', et se termine toujours par une instruction ''eret''.
    142  * le fichier '''stdio.c''' est écrit en C, et contient le code des fonctions C permettant à un programme applicatif s'exécutant en mode ''user'' d'accéder aux périphériques ''mappés'' dans le segment ''kernel'', en effectuant des appels système.
    143  * le fichier '''syscalls.s''' est écrit en C et contient le code des appels systèmes proprement dits. Ce code s'exécute en mode kernel, et permet l'accès aux périphériques ou aux registres protégés du processeur.
    144  * le fichier '''main.c''' est écrit en C et contient le code de l'application logicielle, qui peut évidemment utiliser les fonctions définies dans le fichier ''stdio.c''.
    145  * le fichier '''ldscript''' contient les directives pour l'éditeur de liens, et en particulier les adresses de base des différents segments.
     139 * les fichier '''stdio.c''' et '''stdio.h''' sont écrits en C, et contiennent le code des appels systèmes permettant à un programme s'exécutant en mode ''user'' d'accéder aux périphériques.
     140 * les fichiers '''drivers.c''' et '''drivers.h''' sont  écrits en C et contiennent le code des fonctions systèmes qui s'exécutent en mode kernel, qui accèdent effectivement aux périphériques ou aux registres protégés du processeur.
     141 * le fichier '''isr.s''' contient le code des routines de traitement des interruptions (Interrupt Service Routine).
     142
     143Le répertoire '''soft''' de l'archive qui vous est fournie contient les fichiers spécifiques à l'application embarquée :
     144
     145 * 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,
     146car il est chargé d'initialiser les périphériques présents dans l'architecture. IL initialise quelques registres, du processeur
     147(en particulier le pointeur de pile), avant de se brancher à la pemière instruction du programme ''main'', en forçant le processeur à passer en mode ''user'' gràce à l'instruction ''eret''.
     148 * le fichier '''main.c''' est écrit en C et contient le code de l'application logicielle, qui peut évidemment utiliser les appels système définis dans le fichier ''stdio.c''.
     149 * 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.
    146150 * le fichier '''Makefile''' permet de lancer la génération du logiciel embarqué.
    147151
    148 La génération du code binaire est totalement indépendante de la génération du simulateur. La chaîne de compilation croisée GCC fournit quatre outils:
     152La génération du code binaire embarqué est totalement indépendante de la génération du simulateur de l'architecture matérielle. La chaîne de compilation croisée GCC fournit quatre outils:
    149153 * mipsel-unknown-elf-gcc : '''compilateur''', pour transformer un fichier source C (extension .c) en fichier assembleur pour MIPS32 (extension .s)
    150154 * mipsel-unknown-elf-as : '''assembleur''', pour transformer un fichier assembleur (extension .s) en fichier binaire objet (extension .o)
     
    157161}}}
    158162
    159 '''Question''' : Editez le fichier ''stdio.c''. Quels sont les appels système qui permettent d'accéder à un terminal TTY ? Lorsqu'il y a plusieurs terminaux dans l'architecture, comment est sélectionné le terminal cible ? (la réponse est dans le fichier ''syscalls.s'')
    160 
    161163'''Question''' : Editez le fichier ''reset.s''.Quelles sont les initialisations réalisées par le code de boot ?
    162164
    163165On rappelle que l'instruction ''eret'' de sortie du GIET ou du code de boot effectue principalemnt deux actions :
    164  1. Elle modifie le registre protégé SR (registre 12 du coprocesseur ''système'') pour que le processeur retourne dans le mode où il était lorsqu'il a été dérouté par une interruption, une exception ou un appel système.
     166 1. Elle modifie le registre protégé SR (registre 12 du coprocesseur ''système'') pour que le processeur retourne dans le mode ''user''.
    165167 1. Elle effectue un branchement à l'adresse contenue dans le registre protégé EPC (registre 14 du coprocesseur ''système'').
    166168
    167169'''Question''' : Ouvrez le fichier ''main.c''. Que fait ce programme ? (on rappelle que la fonction ''tty_getc()'' est bloquante, et ne rend pas la main  tant qu'un caractère n'a pas été saisi au clavier).
     170
     171'''Question''' : Editez le fichier ''stdio.c''. Quels sont les appels système qui permettent d'accéder à un terminal TTY ? Lorsqu'il y a plusieurs terminaux dans l'architecture, comment est sélectionné le terminal cible ?
     172
     173Complé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.
    168174
    169175Lancez l'exécution du Makefile. Deux fichiers ''bin.soft'' et ''bin.soft.txt'' doivent  être créés dans le répertoire ''soft'' :
     
    172178== 4.3 Définition de l'architecture matérielle ==
    173179
    174 Complétez le fichier ''tp3_top.cpp'':
    175  *  Il faut enregister les 7 segments dans la ''!MappingTable''. N'hésitez pas à consulter la documentation de la !MappingTable pour bien comprendre la signification des 4 arguments du constructeur de la !MappingTable, ainsi que la signification des 5 arguments du constructeur d'un segment.
     180Vous devez Compléter le fichier ''tp3_top.cpp'':
     181 *  Il faut enregister les 7 segments dans la ''!MappingTable''. Consultez la documentation de la !MappingTable pour bien comprendre la signification des 4 arguments du constructeur de la !MappingTable, ainsi que la signification des 5 arguments du constructeur d'un segment.
    176182 * Il faut définir les arguments de tous les constructeurs des composants matériels instanciés, ainsi que les valeurs de leurs paramètres template.
    177183 * Il faut définir le cheminom  permettant au ''loader'' des composants ROM et RAM d'accéder au fichier ''bin.soft'' contenant le code binaire.
    178  * Il faut enfin compléter la net list en connectant les signaux du bus.
     184 * Il faut enfin compléter la net-list en connectant les signaux du bus.
    179185
    180186Pour ce qui concerne le composant vci_xcache_wrapper, 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.
    181187 
    182 '''Question''' : Parmi les 7 segments utilisés dans cette l'architecture, lesquels doivent être déclarés cachables ?
     188'''Question''' : Parmi les 9 segments utilisés dans cette l'architecture, lesquels doivent être non-cachables ?
    183189
    184190'''Question''' : Quel est le nombre de bits de poids fort de l'adresse qui doivent être décodés par le contrôleur du bus