Vous êtes sur la page 1sur 14

Compte Rendu

d’informatique
Embarquée

Réalisé par : Ghita Souni


Othmane Kachkache
Encadrée par : Pr Aicha Alami Hassani

Année universitaire :2018/2019

1
Sommaire :

I. Introduction

II. Préparation de la carte Micro SD

III. Démarrage et accès à la fox G20

IV. Les Programme réalisés en C au site web embarqué

2
Introduction :
L’objectif des séances de travaux pratiques « Systèmes Embarqués » est de faire une
présentation du système embarqué appelé carte FOX G20 tournant sous Linux. L’idée est de
donner un aperçu des possibilités offertes par le système dans un premier temps ,puis
d’expliquer comment communiquer avec la carte et réalisé des projets de type embarqué
utilisant une multitude de langages :C,C++,Shell…

Pour métriser les différentes phases de portage du noyau Linux sur la plateforme
embarquée ,les séances de Tps porteront sur :

 Le démarrage du noyau linux sur la plateforme Fox G20 avec le processeur ARM
 L’exécution des commandes Linux sur la carte
 Le contrôle des ports d’entrée/sortie de la carte
 La mise en œuvre d’un serveur web embarqué
 L’étude des mécanismes de communication réseau client/serveur

Système mis en œuvre :

 Carte FOX G20


 Modem/routeur ou routeur
 Led/s
 Résistances
 Bouton Poussoirs
 Afficheurs 7 segments

Logiciels utilisés :

 Virtual Box +Linux Ubunto+Gparted


 Sous Windows: PuTTY

3
Préparation de la carte
Micro Sd :
Avant d’entamer la partie du formatage de notre carte SD ainsi que la répartition on
va présenter un aperçu sur la carte FOX G20 .

La carte FOX G20 est un système embarqué utilisant un système d’exploitation Linux .
Elle est dotée d’un processeur ARM d’ATmel .

Comme il est mentionné dans la figure la Fox G20 est composée :

 Connecteur d’alimentation /connecteur Ethernet/2 ports USB


 Bouton-poussoir, des Switch
 Plusieurs Port séries ainsi des I/O numériques
 Pile de sauvegarde

4
Après la description de la FOX G20, on passe au formatage et la répartition de notre
carte microSD

Le premier élément de code exécuté lors du démarrage de la carte FOX G20 est le boot
donc notre carte SD doit contenir deux partitions :

 Kernel : qui contient le noyau Linux


 Rootfs : qui contient le système de fichier Linux

En général, les cartes MicroSD sont constituées d’une seule partition principale
formatée en FAT32.
L’outil qu’on va utiliser pour gérer les partitions et le Gparted sous Linu:

Pour la première partition nommée Boot on utilise le système de fichier FAT32 avec
une taille supérieur a 64MB
Pour La deuxième partition nommée Rootfs on utilise le système de fichier EXT4 avec
une taille supérieur a 700MB
Et finalement pour décompacter les archives du Kernel et du système de fichier et
copier leur contenu respectivement dans les partitions Rootfs et boot on exécute les deux
commandes suivantes sur Linux :
jijaya@jijaya-VirtualBox:~$ Sudo tar -xvjpsf kernel.tar.bz2 -c /media/$USER/Kernel
jijaya@jijaya-VirtualBox:~$ Sudo tar -xvjpsf rootfs.tar.bz2 -c /media/$USER/rootfs

5
Démarrage et accès à la fox
g20 :
Après avoir réalisé la bonne répartition de la carte MICRO SD on a pu entamer la partie
d’accès à la FOXG20 , on a débuté avec un premier programme qui est dédié à allumer une
LED seulement si on change la position de notre SWITCH a 1 sinon la Led va s’éteindre , en
utilisant le logiciel PuTTY et les commandes Linux :

Pour s’identifier on
utilise :
Login : root
Password : netus G20

6
Voilà donc le programme d’allumage du led en utilisant un switch :

 Explication des commandes Shell :


Echo 50 > /sys/class/GPIO/export : indique l’exportation de la ligne GPIO de la broche J7.3
Echo out > /sys/class/GPIO/piob18/direction : on utilise la broche comme une sortie
Puis on copie la valeur du port dédié au switch a celle de la led si v=1 la led est allumée
sinon la valeur de la led est 0 donc elle est éteinte

7
Les programmes réalisés en c
au site web embarqué :
La carte Fox G20 embarque un serveur web accessible tout simplement sur un
http://adresseIP/.
Donc après avoir connecter notre PC avec le même réseau de la carte FOXG20 avec
l’utilisation d’un câble Ethernet liée a un routeur pour attribuer une adresse Ip , on accède a
l’interface de PuTTY pour exécuter la commande « Ifconfig eth0 » pour savoir notre adresse
Ip , puis a base de cette adresse on va accéder au site embarqué

Apres avoir entrer le login et le Password indiquer dans la figure en peut développer
nos programme en langage C .
Donc voila l’ensemble des programmes qu’on a réalisé durant les séances du TP :

8
1. Clignotement d’une LED :
// après le code du DRIVER :
int main() {

S_GPIO_LINE s_line9;

s_line9.id_pin=63;

sprintf(s_line9.id_line, "B31");

int sw = 1;

load_gpio_line(&s_line9);

set_gpio_direction(&s_line9, OUT);

while(1)

set_gpio_line(&s_line9, HIGH);

sleep(1);

set_gpio_line(&s_line9, LOW);

sleep(1);

return 0;

2. Clignotement du LED en utilisant un Switch :


// après le code du DRIVER :
int main() {

S_GPIO_LINE s_line9,s_line8;

s_line9.id_pin=63;

s_line8.id_pin=62;

sprintf(s_line9.id_line, "B31");//voir sur la feuille

sprintf(s_line8.id_line, "B30");

int sw = 1;

load_gpio_line(&s_line9);

set_gpio_direction(&s_line9, OUT);

9
set_gpio_direction(&s_line8, IN);

while(1)

if(get_gpio_line(&s_line8)==1){

set_gpio_line(&s_line9, HIGH);

sleep(1);

set_gpio_line(&s_line9, LOW);

sleep(1);}

return 0;

3. Chenillard sans l’utilisation du switch :


// après le code du DRIVER :
int main() {

S_GPIO_LINE s_line9,s_line8,s_line7,s_line6;

s_line9.id_pin=53;

s_line8.id_pin=52;

s_line7.id_pin=63;

s_line6.id_pin=62;

sprintf(s_line9.id_line, "B21");//voir sur la feuille

sprintf(s_line8.id_line, "B20");

sprintf(s_line7.id_line, "B31");//voir sur la feuille

sprintf(s_line6.id_line, "B30");

int sw = 1;

load_gpio_line(&s_line9);

load_gpio_line(&s_line8);

load_gpio_line(&s_line7);

load_gpio_line(&s_line6);

set_gpio_direction(&s_line9, OUT);

set_gpio_direction(&s_line8, OUT);

10
set_gpio_direction(&s_line7, OUT);

set_gpio_direction(&s_line6, OUT);

while(1)

set_gpio_line(&s_line9, HIGH);

sleep(1);

set_gpio_line(&s_line9, LOW);

set_gpio_line(&s_line8, HIGH);

sleep(1);

set_gpio_line(&s_line8, LOW);

set_gpio_line(&s_line7, HIGH);

sleep(1);

set_gpio_line(&s_line7, LOW);

set_gpio_line(&s_line6, HIGH);

sleep(1);

set_gpio_line(&s_line6, LOW);

return 0;

4. Chenillard avec l’utilisation du switch


// après le code du DRIVER :
int main() {

S_GPIO_LINE s_line9,s_line8,s_line7,s_line6, s_line5;

s_line9.id_pin=53;

s_line8.id_pin=52;

s_line7.id_pin=63;

s_line6.id_pin=62;

s_line5.id_pin=50;

sprintf(s_line9.id_line, "B21");//voir sur la feuille

sprintf(s_line8.id_line, "B20");

sprintf(s_line7.id_line, "B31");//voir sur la feuille

11
sprintf(s_line6.id_line, "B30");

sprintf(s_line5.id_line, "B18");

int sw = 1;

load_gpio_line(&s_line9);

load_gpio_line(&s_line8);

load_gpio_line(&s_line7);

load_gpio_line(&s_line6);

load_gpio_line(&s_line5);

set_gpio_direction(&s_line9, OUT);

set_gpio_direction(&s_line8, OUT);

set_gpio_direction(&s_line7, OUT);

set_gpio_direction(&s_line6, OUT);

set_gpio_direction(&s_line5, IN);

while(1)

if ( get_gpio_line(&s_line5)==1 ) {

set_gpio_line(&s_line9, HIGH);

sleep(1);

set_gpio_line(&s_line9, LOW);

set_gpio_line(&s_line8, HIGH);

sleep(1);

set_gpio_line(&s_line8, LOW);

set_gpio_line(&s_line7, HIGH);

sleep(1);

set_gpio_line(&s_line7, LOW);

set_gpio_line(&s_line6, HIGH);

sleep(1);

set_gpio_line(&s_line6, LOW);

return 0;

12
}

5. Compteur /Décompteur avec un Switch :


// après le code du DRIVER :

int d[10]={0,0,0,0,0,0,0,0,1,1};

int c[10]={0,0,0,0,1,1,1,1,0,0};

int b[10]={0,0,1,1,0,0,1,1,0,0};

int a[10]={0,1,0,1,0,1,0,1,0,1};

int i;

int main() {

S_GPIO_LINE s_line9,s_line8,s_line7,s_line6, s_line5;

s_line9.id_pin=53;

s_line8.id_pin=52;

s_line7.id_pin=63;

s_line6.id_pin=62;

s_line5.id_pin=7;

sprintf(s_line9.id_line, "B21");//voir sur la feuille

sprintf(s_line8.id_line, "B20");

sprintf(s_line7.id_line, "B31");//voir sur la feuille

sprintf(s_line6.id_line, "B30");

sprintf(s_line5.id_line, "A7");

int sw = 1;

load_gpio_line(&s_line9);

load_gpio_line(&s_line8);

load_gpio_line(&s_line7);

load_gpio_line(&s_line6);

load_gpio_line(&s_line5);

set_gpio_direction(&s_line9, OUT);

set_gpio_direction(&s_line8, OUT);

set_gpio_direction(&s_line7, OUT);

13
set_gpio_direction(&s_line6, OUT);

set_gpio_direction(&s_line5, IN);

while(1)

get_gpio_line(&s_line5);

for( i=0;i<10;i++)

get_gpio_line(&s_line5);

if(s_line5.value==0)

set_gpio_line(&s_line9, a[i]);

set_gpio_line(&s_line8, b[i]);

set_gpio_line(&s_line7, c[i]);

set_gpio_line(&s_line6, d[i]);

sleep(1);

get_gpio_line(&s_line5);

if(s_line5.value==1){

set_gpio_line(&s_line9, a[10-i]);

set_gpio_line(&s_line8, b[10-i]);

set_gpio_line(&s_line7, c[10-i]);

set_gpio_line(&s_line6, d[10-i]);

sleep(1);

return 0;

14