Compte Rendu Informatique Embarqué
Compte Rendu Informatique Embarqué
Compte Rendu Informatique Embarqué
d’informatique
Embarquée
1
Sommaire :
I. Introduction
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
Logiciels utilisés :
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 .
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 :
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 :
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;
S_GPIO_LINE s_line9,s_line8;
s_line9.id_pin=63;
s_line8.id_pin=62;
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;
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_line8.id_line, "B20");
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;
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_line8.id_line, "B20");
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
}
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_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_line8.id_line, "B20");
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