Changes between Version 7 and Version 8 of IOC20_T01


Ignore:
Timestamp:
Jan 30, 2020, 3:56:36 AM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC20_T01

    v7 v8  
    11= 1. Préambule
    22
    3 Au long de ce module, vous allez utiliser 4 nano-ordinateurs :
    4 * !RaspberryPi 1B
    5 * !RaspberryPi 3B
    6 * Arduino nano
    7 * Module ESP32 TTGO-Lora32-Oled
    8 
    9 Dans ce TP, vous allez :
    10 * écrire une application pour la !RaspberryPi 1B pour faire clignoter deux LEDs selon un motif que vous choisirez et également de récupérer les informations d'un bouton poussoir.
    11 
    12 À la fin de ce TP, vous devriez avoir acquis les compétences suivantes:
    13 * Compilation croisée via un compilateur déporté
    14 * Contrôle distant de système embarqué par liaison réseau (SSH)
    15 * Manipulation d'un périphérique GPIO et de ses registres "memory mappés"
     3Au long de ce module, vous allez utiliser 4 nano-ordinateurs (!RaspberryPi 1B, !RaspberryPi 3B, Arduino nano et ESP32 TTGO-Lora32-Oled), quelques périphériques (led, bouton, photorésistance, accéléromètre, etc.) et mettre en oeuvre plusieurs "briques technologiques" intervenant dans les systèmes d'objets communicants (http, mqtt, sql, i2c, arduino, etc.).
     4
     5Vous allez travailler en binôme. Le choix de votre binôme se fait à la première séance et est **définitif**.
     6Dans ce TP, vous allez écrire une application pour !RaspberryPi 1B afin de contrôler deux LEDs et un  bouton un bouton poussoir. Cette application aura trois threads POSIX, 1 par led et 1 pour le bouton poussoir.
     7Ce que vous allez devoir faire, c'est :
     8
     9* Compilation croisée via un compilateur déporté.
     10* Connexion à un système distant par ssh / scp.
     11* Manipulation directe des GPIO d'une !RaspberryPi en mode utilisateur.
    1612* Écriture d’une librairie C pour la manipulation des GPIO.
    17 
    18 Vous écrirez un CR **au format markdown**, dans lequel vous répondrez aux quelques questions du TME, vous mettrez les étapes de configurations de votre compte pour réaliser le TP, ainsi vous conserverez une trace et vous ajouterez vos codes commentés (succinctement mais proprement).
    19 
    20 Contraintes pour le compte-rendu :
    21 - Le document doit impérativement être nommé `ioc_X_nom1_nom2.md` (où X est le numéro du TP: 1 pour le TP1, 2 pour le TP2, etc.)
    22 - vos noms doivent figurer dans le document.
    23 - Vous devez envoyer le document par mail à franck.wajsburt@lip6.fr avec le sujet: `[IOC20] CR TP1 nom1 nom2`
     13* Ecriture d'une application multi-threadées simple.
     14
     15Vous écrirez un **compte-rendu au format markdown** (CR), dans lequel vous répondrez aux quelques questions du TME, vous mettrez les étapes de réalisation du TP, ainsi vous conserverez une trace et vous ajouterez tout ou partie de vos codes commentés (succinctement mais proprement). Les compte-rendus de TP doivent être suffisamment explicites pour que vous puissiez les réutiliser plus tard. Par exemple, vous allez devoir lire des documents externes et vous devrez référencer ces documents (mettre les liens) pour les retrouver. En fonction de vos connaissances de départ, vous pourrez être plus ou moins explicite sur tel ou tel point.
     16
     17* Le  document doit impérativement être nommé `ioc20_X_nom1_nom2.md` (où X est le numéro du TP: 1 pour le TP1, 2 pour le TP2, etc.)
     18* vos noms doivent figurer dans le document.
     19* Vous devez déposer votre CR sur un [https://docs.google.com/forms/d/10EhV4DSbYImtNjE7AQcT-yfjiWES0SpCnX9e6rPptJ0/prefill formulaire Google]
    2420 
    2521 '''Attention : je n'irai pas à la pêche, le non-respect des consignes pour les comptes-rendus sera noté 0 ! (vous êtes trop nombreux).'''
     
    3531
    3632Le schéma ci-dessous représente la plateforme des cartes !RaspberryPi 1.
    37 Pour exécuter votre programme sur une carte !RaspberryPi, vous devez vous connecter en `ssh` sur une carte !RaspberryPi en passant par le routeur peri. Le routeur peri a deux adresses: `132.227.71.43` du coté laboratoire et `192.168.1.1` de l'autre coté.  Le serveur de nom (DNS) du laboratoire a attribué l'adresse `132.227.71.43` le nom `peri`. Le routeur peri crée un sous-réseau (`192.168.1.x`) où sont connectées les cartes !RaspberryPi. Les cartes sont numérotées de `20` à `26`. Le routeur a été configuré pour reconnaître les adresses MAC des cartes et leur attribuer une adresse IP fixe. La carte n°`X` (X allant de 20 à 26) reçoit l'adresse IP 192.168.1.`X` (par exemple la carte n°`20` a comme adresse sur ce réseau `192.168.1.20`).
     33Pour exécuter votre programme sur une carte !RaspberryPi, vous devez vous connecter en `ssh` sur une des carteq !RaspberryPi en passant par le routeur peri. Le routeur peri a deux adresses: `132.227.71.43` du coté laboratoire et `192.168.1.1` de l'autre coté.  Le serveur de nom (DNS) du laboratoire a attribué à l'adresse `132.227.71.43` le nom `peri`. Le routeur peri crée un sous-réseau (`192.168.1.x`) où sont connectées les cartes !RaspberryPi. Les cartes sont numérotées de `20` à `26`. Le routeur a été configuré pour reconnaître les adresses MAC des cartes et leur attribuer une adresse IP fixe. La carte n°`X` (`X` allant de 20 à 26) reçoit l'adresse IP 192.168.1.`X` (par exemple la carte n°`20` a comme adresse sur ce réseau `192.168.1.20`).
    3834Pour faire ça, le firmware du routeur a été remplacé par '''[[http://www.dd-wrt.com/site/index | dd-wrt]]''' qui permet ce type de configuration.  Le routeur a été également été configuré pour que tous les paquets entrants sur le port `62200`+`X` de l'adresse `peri` soient routés vers l'adresse `192.168.1.X` port 22. Le port 22 est celui sur lequel écoute le serveur ssh.
    3935
     
    5955}}}
    6056
    61 Il est recommandé de ne pas laisser de fichiers source sur la carte SD, car celle-ci peut être reformatée en cas de dysfonctionnement.
     57Il est recommandé de ne pas laisser de fichiers source sur la carte SD d'une !RaspberryPi, car celle-ci peut être reformatée en cas de dysfonctionnement.
     58
    6259
    6360
     
    9996   
    10097
    101 Votre suite d'outils (toolchain) contient tous les outils nécessaires pour la compilation, l'édition des liens et la manipulation de binaires pour la carte !RaspberryPi. Et tous ces outils sont préfixés par la même chaîne de caractères: `bcm2708hardfp-`. Il s'agit donc d'un compilateur pour un SoC BCM2708 avec l'option hardfp activée (calcul flottant matériel). Il s'agit bien du SoC de la carte RaspberryPi.
    102 
    103 Maintenant, pour compiler un programme C vers un binaire qui puisse s'exécuter sur la carte RaspberryPi, il vous faut écrire un Makefile pour plus de facilité. Pour cela, suivez la syntaxe de base des Makefile:
     98Votre suite d'outils (toolchain) contient tous les outils nécessaires pour la compilation, l'édition des liens et la manipulation de binaires pour la carte !RaspberryPi. Et tous ces outils sont préfixés par la même chaîne de caractères: `bcm2708hardfp-`. Il s'agit donc d'un compilateur pour un SoC BCM2708 avec l'option hardfp activée (calcul flottant matériel). Il s'agit bien du SoC de la carte !RaspberryPi.
     99
     100Maintenant, pour compiler un programme C vers un binaire qui puisse s'exécuter sur la carte !RaspberryPi, il vous faut écrire un Makefile pour plus de facilité. Pour cela, suivez la syntaxe de base des Makefile:
    104101{{{#!make
    105102cible: dépendances
    106     commande
    107 }}}
    108 Notez bien que l'indentation de la seconde ligne doit OBLIGATOIREMENT être une tabulation et non une suite d'espaces.
    109 
    110 Vous pourrez donc par exemple, écrire la règle de Makefile suivante:
     103        commande
     104}}}
     105Notez bien que l'indentation de la seconde ligne doit OBLIGATOIREMENT être une tabulation et non une suite d'espaces.Vous pourrez donc par exemple, écrire la règle de Makefile suivante:
    111106{{{#!make
    112107helloworld.x: helloworld.c
    113     bcm2708hardfp-gcc -o $@ $< -O2 -static
     108        bcm2708hardfp-gcc -o $@ $< -O2 -static
    114109}}}
    115110
     
    125120
    126121all: $(APP)
    127     scp -P 622$(CARD) $^ pi@peri:$(NAME)
     122        scp -P 622$(CARD) $^ pi@peri:$(NAME)
    128123
    129124clean:
    130     rm $(APP)
     125        rm $(APP)
    131126}}}
    132127
     
    137132  **__0ption -static__**::
    138133  L'option "-static" est utilisée par l'éditeur de lien. Elle est importante ici, car la librairie C du compilateur croisé n'est pas tout à fait identique à la librairie C sur la carte !RaspberryPi. Ajouter "-static" à la ligne de compilation permet de créer un binaire qui contient en plus les fonctions de la librairie C utilisée par votre programme. Ceci permettra à celui-ci de ne pas essayer d'utiliser des fonctions de la librairie C installée sur la carte qui, sinon, aurait été chargée dynamiquement.
     134
     135Vous devez donc :
     136* Créer un répertoire helloworld et vous y déplacer
     137* Créer un fichier C avec seulement la fonction main() qui affiche "Helloworld !" sur stdout.
     138* Créer un Makefile sur le modèle du dernier exemple en le modifiant.
     139* Crosscompiler et uploader l'exécutable sur votre !RaspberryPi
     140* Exécuter le programme.
    139141
    140142== 2.2. Contrôle de GPIO en sortie ==