Changes between Initial Version and Version 1 of QuickStartSoclib


Ignore:
Timestamp:
Feb 11, 2008, 4:28:27 PM (16 years ago)
Author:
becoulet
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QuickStartSoclib

    v1 v1  
     1= MutekH quick start guide for SoCLib platform =
     2----
     3
     4Dans le cadre du projet SoCLib/ANR seules ces deux types de configuration sont documentées.
     5D'autres configurations sont possibles dont, par exemple, celle adaptée aux cartes mères de PC/x86.
     6Elles ne sont pas documentées ici, mais sont présentent dans le dépot svn de MutekH.
     7
     8[[Image(mutekh_overview.gif,nolink)]]
     9
     10MutekH est compilable sur plusieurs processeurs de la bibliothèque SoCLib comme
     11le Mips et le PowerPC. Il est également compilable sur intel X86 en natif ou en
     12émulation dans un processus Unix.
     13
     14= Les configurations de MutekH =
     15
     16MutekH est entièrement configurable pour s'adapter à la fois au matériel sur lequel il s'exécute mais aussi aux besoins de
     17l'application.
     18Il existe une centaine de paramètres permettant de définir une configuraion.
     19Chaque paramètre peut prendre plusieurs valeurs.
     20Les paramètres ne sont pas indépandants les uns vis à vis des autres, deux paramètres peuvent s'exclure ou dépendre l'un de
     21l'autre.
     22MutekH facilite la définition d'une configuration en vérifiant les règles de dépendances et la cohérences des valeurs.
     23
     24Dans ce document nous allons voir deux configurations.
     25
     26 1. Une configuration pour une plateforme x86 émulée dans un processus unix.
     27    [[BR]][[Image(mutekh_overview_emu.gif,nolink)]][[BR]]
     28    L'intérêt de cette plateforme est qu'elle permet de mettre au point une application en bénéficiant des performances de
     29    la machine hôte. Elle permet également d'exécuter une application sans que l'installation de SoCLib ne soit nécessaire.
     30    L'inconvénient est que le seul périphérique disponible est le terminal.
     31    [[BR]][[Image(arch_emu.gif,nolink)]][[BR]]
     32    Les premières applications de ce document utilisent cette configuration. Au delà de son aspect jouet, cette configuration est utile à chaque fois que l'on
     33    s'intéresse à la mise au point d'un algorithme et que l'on a pas besoin de coprocesseurs, ni d'interruption.
     34
     35 2. Une configuration pour un cluster à 4 processeurs (Mips ou PowerPC) autour d'un NoC/VCI.
     36    Cette configuration permet de créer une application pour un simulateur de SoC en systemC/SoCLib.
     37    [[BR]]DESSIN DE LA PLATEFORME: PROC+RAM+LOCK+MULTITTY+...[[BR]]
     38
     39= Premiers pas sur une plateforme émulée =
     40
     41Pour ce premier essai seules les sources de MutekH sont nécessaires.
     42
     43== Récuperation des sources ==
     44
     45svn co -r 471 https://www-asim.lip6.fr/svn/mutekh/trunk/mutekh [[BR]]
     46crée un répertoire mutekh contenant les sources et les documentations de MutekH.
     47L'organisation des sources suit celle des bibliothèques.
     48{{{
     49mutekh
     50|-- arch            code dépendant des plateformes
     51|-- cpu             code dépendant des processeurs
     52|-- doc             documentation
     53|-- drivers         pilotes des périphériques
     54|-- gpct            API de gestion des ensembles
     55|-- hexo            API d'Hexo
     56|-- libc            API standard C
     57|-- libnetwork      API de la pile de protocole réseau
     58|-- libpthread      API des threads Posix
     59|-- libsrl         
     60|-- libunix         API des appels système Unix
     61|-- libvfs          API Virtual File System
     62|-- mutek           
     63|-- scripts         
     64`-- tools
     65}}}
     66
     67== Ecriture du premier programme ==
     68
     69Le programme de test va être placé dans un sous-répertoire du répertoire de mutekh.
     70
     71 1. Création du répertoire de test, dans le répertoire mutekh
     72{{{
     73mkdir benchs benchs/hello
     74cd benchs/hello
     75}}}
     76 2. Ecriture du programme suivant dans le fichier hello.c
     77{{{
     78#include <pthread.h>
     79
     80pthread_mutex_t m;
     81pthread_t a, b;
     82
     83void *f(void *param)
     84{
     85  while (1)
     86    {
     87      pthread_mutex_lock(&m);
     88      printf("(%i) %s", cpu_id(), param);
     89      pthread_mutex_unlock(&m);
     90      pthread_yield();
     91    }
     92}
     93int main()
     94{
     95  pthread_mutex_init(&m, NULL);
     96  pthread_create(&a, NULL, f, "Hello ");
     97  pthread_create(&b, NULL, f, "Wolrd\n");
     98}
     99}}}
     100
     101== Configuration de MutekH ==
     102
     103Tapez le fichier de configuration suivant dans le fichier ``benchs/config_emu``
     104Nous verrons plus loin la signification des configurations.
     105Disons rapidement que cette configuration indique:
     106 - la licence de l'application (et la vérification que les composants sont compatibles avec ce choix),
     107 - que la plateforme cible s'exécute dans un processus Unix sur une plateforme X86
     108 - que l'application utilise les Pthreads.
     109 - que les affichages se font sur le terminal.
     110{{{
     111# Application license
     112  CONFIG_LICENSE_APP_LGPL
     113
     114# Platform types
     115  CONFIG_ARCH_EMU
     116
     117# Processor types
     118  CONFIG_CPU_X86_EMU
     119
     120# Mutek features
     121  CONFIG_PTHREAD
     122  CONFIG_MUTEK_CONSOLE
     123
     124# Device drivers
     125  CONFIG_DRIVER_CHAR_EMUTTY
     126
     127# Code compilation options
     128  CONFIG_COMPILE_DEBUG
     129}}}
     130
     131== 4. Compilation de l'application et de MutekH ==
     132
     133La compilation se fait en tapant:
     134{{{
     135make CONF=benchs/config_emu LIBAPP=benchs/hello/hello.o
     136}}}
     137Le Makefile compile les sources du système et de l'application en tenant compte du fichier de configuration.
     138Le résultat de cette compilation est:
     139{{{
     140kernel-emu-x86-emu.out
     141}}}
     142
     143== 5. Exécution ==
     144
     145L'exécution du programmme ``kernel-emu-x86-emu.out`` rend normalement:
     146{{{(0) Hello (0) World
     147(0) Hello (0) World
     148(0) Hello (0) World
     149(0) Hello (0) World
     150...
     151}}}
     152
     153= Plus loin sur une plateforme SoCLib =
     154
     155
     156== Récupération des sources de SoCLib ==
     157
     158renvoie au site de soclib à la page d'installation
     159
     160== Description de la plafeforme SoCLib ==
     161
     162Pour ce premier contact avec MutekH, nous avons préparé un plateforme à 4 processeurs.
     163Cette plateforme se trouve dans les sources de SoCLib dans le répertoire
     164``soclib/soclib/platform/topcells/mutekh_basic/``.
     165
     166[[Image(arch_4proc.gif,nolink)]]
     167
     168== Configuration de MutekH ==
     169
     170La configuration de MutekH pour une plateforme simulé de 4 processeurs va etre placé dans le fichier ``benchs/config_mips``:
     171{{{
     172# Application license
     173  CONFIG_LICENSE_APP_LGPL
     174
     175# Platform types
     176  CONFIG_ARCH_SOCLIB
     177
     178# Processor types, Mips big endian with multiprocessor support up to 4 cpus
     179  CONFIG_CPU_MIPS
     180  CONFIG_CPU_ENDIAN_BIG
     181  CONFIG_SMP
     182  CONFIG_CPU_MAXCOUNT 4
     183
     184# Mutek features
     185  CONFIG_PTHREAD
     186  CONFIG_MUTEK_CONSOLE
     187
     188# Device drivers
     189  CONFIG_DRIVER_CHAR_SOCLIBTTY
     190  CONFIG_DRIVER_ICU_SOCLIB
     191}}}
     192On note que la définition des processeurs changent. On indique qu'il s'agit de 4 mips de type bigendian.
     193Le systeme peut donner des informations sur les options en tapant la commande:
     194{{{
     195make CONF=benchs/config_mips showconfig TOKEN=CONFIG_SMP
     196}}}
     197L'ensemble des configurations possibles (une centaine) peut être obtenu par la commande ci-après:
     198{{{
     199make CONF=benchs/config_mips listconfig
     200}}}
     201Le résultat:
     202{{{
     203    Configuration token name                 Declare location
     204===============================================================================
     205
     206    CONFIG_ARCH_EMU                          (arch/emu/emu.config:2)
     207    CONFIG_ARCH_IBMPC                        (arch/ibmpc/ibmpc.config:2)
     208    CONFIG_ARCH_SIMPLE                       (arch/simple/simple.config:2)
     209 +  CONFIG_ARCH_SOCLIB                       (arch/soclib/soclib.config:2)
     210    CONFIG_CLUSTER                           (arch/arch.config:8)
     211 m  CONFIG_CPU_MAXCOUNT                      (cpu/cpu.config:2)
     212 +  CONFIG_CPU_MIPS                          (cpu/mips/mips.config:2)
     213    CONFIG_CPU_MIPS_ABI_EABI                 (cpu/mips/mips.config:40)
     214    CONFIG_CPU_MIPS_ABI_N32                  (cpu/mips/mips.config:34)
     215 +  CONFIG_CPU_MIPS_ABI_O32                  (cpu/mips/mips.config:22)
     216    CONFIG_CPU_MIPS_ABI_O64                  (cpu/mips/mips.config:28)
     217 v  CONFIG_CPU_MIPS_VERSION                  (cpu/mips/mips.config:16)
     218    ...
     219    (+) defined, (p) provided, (m) mandatory, (v) value.
     220}}}
     221
     222== Compilation de l'application et de MutekH ==
     223
     224La plateforme mutek_basic s'adapte automatique à la configuration des sources de MutekH (type de cpu, ...).
     225il faut donc ajouter un lien symbolique dans le repertoire de la plateforme soclib mutek_basic vers les sources de MutekH.
     226{{{
     227cd ~/soclib/soclib/platform/topcells/mutekh_basic
     228ln -s ~/mutekh
     229}}}
     230Par ailleurs, Mutekh doit connaitre les adresses liées au matériel de la plateforme, Il faut donc ajouter des liens symboliques dans le repertoire de mutekh vers la description des adresses de la plateforme:
     231{{{
     232cd ~/mutekh
     233ln -s ~/soclib/soclib/platform/topcells/mutekh_basic/soclib_addresses.h
     234ln -s ~/soclib/soclib/platform/topcells/mutekh_basic/soclib_addresses.ldscript.m4
     235}}}
     236On commence par compiler le système MutekH avant de compiler la plateforme.
     237La compilation de MutekH impose que les cross tools suivant soient disponibles:
     238 - mipsel-unknown-elf-gcc
     239 - mipsel-unknown-elf-ld
     240 
     241{{{
     242make CONF=benchs/config_mips LIBAPP=benchs/hello/hello.o
     243}}}
     244Lancer la compilation de la plateforme:
     245{{{
     246cd soclib/soclib/platform/topcells/mutekh_basic
     247make
     248}}}
     249
     250== Exécution ==
     251
     252{{{
     253./system.x ~/mutekh/kernel-soclib-ppc.out
     254}}}