Changes between Version 4 and Version 5 of SoclibCourseTp5


Ignore:
Timestamp:
Oct 19, 2009, 6:40:38 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp5

    v4 v5  
    55[[PageOutline]]
    66
    7 = 1 Objectif =
     7= 1 Objectifs =
    88
    9 Le principal objectif de ce TP est d'introduire l'outil '''GDB Server''' qui permet de déverminer une application
    10 logicielle embarquée s'exécutant sur une architecture matérielle prototypée avec SoCLib.
     9Ce TP possède un double objectif. D'un côté, on présente l'outil '''GDB Server''' qui est pratiquement indispensable pour déverminer une application logicielle embarquée s'exécutant sur une architecture matérielle prototypée avec SoCLib.
     10D'autre part, et puisque l'outil GDB Server permet d'analyser le comportement d'architectures multiprocesseurs,
     11on en profiter pour  introduire les architectures clusterisées utilisant deux niveaux d'indexation.   
    1112
    1213= 2 Outil GDB Server =
     
    4546(en effectuant directement des commandes de lecture ou d'écriture vers les composants adressables).
    4647
    47 Il ne fautpas oublier d'inclurele "header" dans la top-cell
     48Il ne fautpas oublier d'inclure le "header" dans la top-cell
    4849{{{
    4950#include "gdb_server.h"
     
    6465}}}
    6566
     67== 2.3 lancement du client GDB ==
     68
    6669Une 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:
    6770{{{
     
    7376(gdb) target remote Localhost:2346
    7477}}}
     78
     79== 2.4 identification des processeurs ==
     80
     81L'outil GDB standard permet par d'analyser le comportement d'applications multi-threads s'exécutant sur une architecture
     82monoprocesseur. Nous souhaitons ici contrôler une architecture multi-processeurs. Pour pouvoir re-utiliser le client GDB
     83standard, le GDB Server considère chaque processeur comme une thread. Pour obtenir le nombre de processeurs
     84contrôlables par GDB, il faut taper la commande :
     85{{{
     86(gdb) info threads
     87}}}     
     88Attention : la numérotation des threads ne correspond pas nécessairement à la numérotation des processors (proc_id)
     89
     90== 2.5 Points d'arrêt ==
     91
     92La commande ''break'' (br) permet de poser des points d'arrêt correspondant à la détection
     93d'une adresse particulière dans le registre PC d'un processeur quelconque de l'architecture simulée :
     94{{{
     95(gdb) br *0x8000180
     96}}}
     97Dans ce cas, tous les processeurs de la plate-forme s'arrêtent simultanément.
     98
     99On peut également utiliser un nom de fonction plutôt qu'une adresse hexadécimale
     100{{{
     101(gdb) br function_name
     102}}}
     103
     104== 2.6 Exécution ==
     105
     106Lorsque l'exécution est arrété, la commande ''continue'' (c) permet de relancer l'exécution jusqu'au prochain point d'arrêt.
     107Tous les processeurs reprennent leur exécution.
     108{{{
     109(gdb) c
     110}}}
     111
     112La commande ''stepi'' permet de relancer l'exécution d'une seule instruction assembleur. Seul le processeur qui a détecté un point d'arrêt est concerné. Les autres processeurs restent bloqués:
     113{{{
     114(gdb) stepi
     115}}}
     116
     117== 2.7 Observation des registres ==
     118
     119La commande ''info'' permet d'afficher différentes informations.
     120{{{
     121(gdb) info
     122}}}
     123Sans argument cette commande donne la liste des informations disponibles.
     124{{{
     125(gdb) info reg
     126}}}
     127Avec l'argument ''reg'', elle affiche le contenu des registres du processeur qui a détecté un point d'arrêt.
     128Si on veut observer les valeurs contenues dans les registres d'un autre processeur, il faut préalablement
     129utiliser la commande ''thread n'' (où n est le numéro de la thread représentant le processeur.
     130{{{
     131(gdb) thread n
     132(gdb) info reg
     133}}}
     134
     135== 2.8 Observation/modification de la mémoire ==
    75136 
    76    
    77 == 2.1 Points d'arrêt ==
     137Pour observer les valeurs contenues en mémoire, on peut utiliser la commande ''examine'' (x) :
     138{{{
     139(gdb) x/10x 0x400000
     140}}}
     141Cette commande va afficher en hexadécimal 10 mots de 32 bits à partir de l'adresse 0x400000.
     142
     143Pour modifier une valeur en mémoire, on peut utiliser la commande ''set'' :
     144{{{
     145(gdb) set *(int*)0x400000 = val
     146}}}
     147Cette commande écrit la valeur val (de type int) à l'adresse 0x400000.
    78148
    79149= 3 Architectures Clusterisées =