Changes between Version 75 and Version 76 of SoclibCourseTp3


Ignore:
Timestamp:
Dec 5, 2013, 8:16:52 PM (10 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp3

    v75 v76  
    9191Le 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.
    9292
    93 == 3.2 Chargement du code ==
     93== 3.3 Chargement du code ==
    9494
    9595Il existe deux méthodes permettant de charger le code binaire dans les mémoires embarquées sur la puce:
    9696 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 boot qui 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.
    9898
    9999La phase de chargement du système d'exploitation et du code applicatif  est en pratique exécutée à chaque mise sous tension,
     
    150150 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é.
    151151
    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''.
     152Par 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'''.
    153153
    154154== 4.1 Compilation du logiciel embarqué ==
     
    160160 * 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''.
    161161
    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.
    163163
    164164 * le fichier '''Makefile''' permet de lancer la génération du logiciel embarqué.
    165165
    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. La chaîne de compilation croisée GCC fournit quatre outils:
     166La chaîne de compilation croisée GCC fournit quatre outils:
    167167 * mipsel-unknown-elf-gcc : '''compilateur''', pour transformer un fichier source C (extension .c) en fichier assembleur pour MIPS32 (extension .s)
    168168 * mipsel-unknown-elf-as : '''assembleur''', pour transformer un fichier assembleur (extension .s) en fichier binaire objet (extension .o)
     
    184184Quels 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?
    185185
    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
     188Lancez 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?
    192193
    193194== 4.2 Description de l'architecture matérielle ==
     
    354355Pour introduire un peu d'interactivité dans cet exercice, vous pouvez introduire dans la boucle
    355356un 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.
    357359
    358360= 5 Compte-rendu =