31 0 983KB
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