Changes between Version 3 and Version 4 of SoclibCourseTp5


Ignore:
Timestamp:
Oct 19, 2009, 5:26:07 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp5

    v3 v4  
    11{{{
    22#!html
    3 <h1>TP5 : Architectures multi-processeurs </h1>
     3<h1>TP5 : GDB server </h1>
    44}}}
    55[[PageOutline]]
     
    77= 1 Objectif =
    88
    9 = 2 Architectures Clusterisées =
     9Le principal objectif de ce TP est d'introduire l'outil '''GDB Server''' qui permet de déverminer une application
     10logicielle embarquée s'exécutant sur une architecture matérielle prototypée avec SoCLib.
     11
     12= 2 Outil GDB Server =
     13
     14L'outil '''GDB Server''' permet d'analyser finement le comportement d'une application logicielle multi-threads s'exécutant sur une architecture matérielle multi-processeur  modélisée avec SoCLib.
     15
     16Cet outil permet à un client GDB (voir [http://www.gnu.org/software/gdb/ Gnu GDB]) s'exécutant sur n'importe quelle station de travail de prendre le contrôle du simulateur d'une plate-forme matérielle modélisée avec SoCLib.
     17 La documentation de l'outil peut être consultée [https://www.soclib.fr/trac/dev/wiki/Tools/GdbServer ici].
     18
     19Le GDB Server permet de:
     20 * poser des points d'arrêt
     21 * d'exécuter le programme en pas à pas
     22 * de visualiser le contenu des registres de n'importe quel processeur
     23 * de visualiser la valeur stockée à n'importe quelle adresse dans l'espace adressable
     24 * de modifier le contenu de la mémoire ou d'un registre d'un processeur
     25
     26Le simulateur (qui contient le serveur GDB) et le client GDB peuvent s'exécuter sur deux stations de travail différentes,
     27puisque les communications entre le client GDB et le serveur GDB utilisent un canal TCP.
     28
     29== 2.1 Modification de la top-cell ==
     30
     31Pour utiliser le '''GDB Server''', tous les processeurs dont on souhaite prendre le contrôle doivent être instanciés
     32dans un mode particulier lorsqu'on définit l'architecture de la '''top-cell'''.
     33Il faut remplacer l'instanciation habituelle du processeur:
     34{{{
     35VciXcacheWrapper<Mips32ElIss> cpu0("cpu0", ...);
     36}}}
     37par une instanciation faisant appel au GDB Server
     38{{{
     39VciXcacheWrapper<GdbServer<Mips32ElIss> > cpu0("cpu0", ...);
     40}}}
     41
     42Le GDB server est donc un pseudo-composant matériel, qui s'interface entre le processeur et le cache.
     43En prenant le contrôle du GDB Server (par l'intermédiaire du client GDB), on peut donc contrôler le processeur,
     44(pour le faire fonctionnner en pas à pas par exemple), et on peut également contrôler le reste du système
     45(en effectuant directement des commandes de lecture ou d'écriture vers les composants adressables).
     46
     47Il ne fautpas oublier d'inclurele "header" dans la top-cell
     48{{{
     49#include "gdb_server.h"
     50}}}
     51
     52Il faut également complêter le fichier de description de l'architecture utilisé par soclib-cc (fichier platform.desc) :
     53{{{
     54Uses('caba:iss_wrapper', iss_t = 'common:gdb_iss', gdb_iss_t = 'common:mips32el')
     55}}}
     56
     57== 2.2 lancement de la simulation ==
     58
     59Pour utiliser GDB Server, il est généralement préférable de lancer le simulateur dans un mode où la plate-forme est "gelée",
     60et attend une commande du GDB Server. Cela peut être réalisé en définissant la variable d'environnement SOCLIB_GDB avant de lancer le simulateur :
     61{{{
     62$ export SOCLIB_GDB=START_FROZEN
     63$ ./simulator.x
     64}}}
     65
     66Une fois que le simulateur est lancé, il faut lancer (dans une autre fenêtre), l'exécution du client GDB adapté au type de processeur instancié dans la plate-forme, en lui passant en argument le nom du fichier contenant le code binaire exécuté par les processeurs de l'architecture. Pour un processeur MIPS32:
     67{{{
     68mipsel_unknown_elf_gdb  soft/bin.soft
     69}}}
     70
     71La première commande à taper dans GDB est la commande permettant de connecter le client GDB au GDB Server:
     72{{{
     73(gdb) target remote Localhost:2346
     74}}}
     75 
     76   
     77== 2.1 Points d'arrêt ==
     78
     79= 3 Architectures Clusterisées =
    1080
    1181Nous appellerons ''architecture clusterisée'' une architecture dans laquelle on utilise un double système d'index