| 9 | | = 2 Architectures Clusterisées = |
| | 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. |
| | 11 | |
| | 12 | = 2 Outil GDB Server = |
| | 13 | |
| | 14 | L'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 | |
| | 16 | Cet 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 | |
| | 19 | Le 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 | |
| | 26 | Le simulateur (qui contient le serveur GDB) et le client GDB peuvent s'exécuter sur deux stations de travail différentes, |
| | 27 | puisque les communications entre le client GDB et le serveur GDB utilisent un canal TCP. |
| | 28 | |
| | 29 | == 2.1 Modification de la top-cell == |
| | 30 | |
| | 31 | Pour utiliser le '''GDB Server''', tous les processeurs dont on souhaite prendre le contrôle doivent être instanciés |
| | 32 | dans un mode particulier lorsqu'on définit l'architecture de la '''top-cell'''. |
| | 33 | Il faut remplacer l'instanciation habituelle du processeur: |
| | 34 | {{{ |
| | 35 | VciXcacheWrapper<Mips32ElIss> cpu0("cpu0", ...); |
| | 36 | }}} |
| | 37 | par une instanciation faisant appel au GDB Server |
| | 38 | {{{ |
| | 39 | VciXcacheWrapper<GdbServer<Mips32ElIss> > cpu0("cpu0", ...); |
| | 40 | }}} |
| | 41 | |
| | 42 | Le GDB server est donc un pseudo-composant matériel, qui s'interface entre le processeur et le cache. |
| | 43 | En 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 | |
| | 47 | Il ne fautpas oublier d'inclurele "header" dans la top-cell |
| | 48 | {{{ |
| | 49 | #include "gdb_server.h" |
| | 50 | }}} |
| | 51 | |
| | 52 | Il faut également complêter le fichier de description de l'architecture utilisé par soclib-cc (fichier platform.desc) : |
| | 53 | {{{ |
| | 54 | Uses('caba:iss_wrapper', iss_t = 'common:gdb_iss', gdb_iss_t = 'common:mips32el') |
| | 55 | }}} |
| | 56 | |
| | 57 | == 2.2 lancement de la simulation == |
| | 58 | |
| | 59 | Pour 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", |
| | 60 | et 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 | |
| | 66 | Une 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 | {{{ |
| | 68 | mipsel_unknown_elf_gdb soft/bin.soft |
| | 69 | }}} |
| | 70 | |
| | 71 | La 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 = |