Difference between revisions of "Proj-2011-2012-qemu"

From air
Jump to navigation Jump to search
Line 1: Line 1:
  +
=Émulation de la carte STM32L-Discovery avec Qemu=
= Projet Qemu et cartes ARM Cortex-M3 =
 
 
 
Enseignant:
 
Enseignant:
 
*Olivier Richard
 
*Olivier Richard
Line 9: Line 8:
 
*MERCIER Michael
 
*MERCIER Michael
   
Le but de ce projet est de d'ajouter le support de la carte STM32L-Discovery dans le logiciel de virtualisation Qemu.
+
Le but de ce projet est de d'ajouter le support de la carte STM32L-Discovery dans le logiciel de virtualisation [[Qemu]].
 
Il fait suite au projet de l'année dernière ([[Fiche_Projet_Qemu_Stellaris |fiche projet]]) basé lui aussi sur Qemu mais portant sur la carte [[Stellaris Luminary Lm3s6965]].
 
Il fait suite au projet de l'année dernière ([[Fiche_Projet_Qemu_Stellaris |fiche projet]]) basé lui aussi sur Qemu mais portant sur la carte [[Stellaris Luminary Lm3s6965]].
 
   
 
== Qemu ==
 
== Qemu ==
Line 17: Line 15:
   
 
== Fichiers ==
 
== Fichiers ==
Afin d'émuler la carte STM32L-Discovery les fichiers suivant on été ajoutés au dossier src/hw :
+
Afin d'émuler la carte STM32L-Discovery les fichiers suivant on été ajoutés au dossier src/hw de Qemu :
 
* '''stm32.c''' pour décrire la carte dans son ensemble
 
* '''stm32.c''' pour décrire la carte dans son ensemble
 
* '''stm32_gpio.c''' pour les gpio
 
* '''stm32_gpio.c''' pour les gpio
Line 37: Line 35:
   
 
=== GPIO ===
 
=== GPIO ===
L'émulation des [http://fr.wikipedia.org/wiki/General_Purpose_Input/Output GPIO] est gérée par le fichier stm32_gpio.c.
+
L'émulation des [http://fr.wikipedia.org/wiki/General_Purpose_Input/Output GPIO] est gérée par le fichier stm32_gpio.c. Les GPIO sont les connecteur de base de la carte. Il permet de communiquer avec le bouton USER 0 et les LEDs.
  +
  +
=== Périphériques ===
  +
L'émulation ne porte pour l'instant que sur les deux LEDs (stm32_led.c) et le bouton USER0 (stm32_button.c) qui communique avec l'extérieur de Qemu grâçe à [[Qemu#CharDev | chardev ]].
  +
  +
== Interface graphique ==
  +
Une interface graphique utilisateur (UI) en python à été développer afin de permettre à l'utilisateur une meilleur prise en main. Qemu se connecte à l'UI par des sockets fournis par les modules des deux LED et du bouton via chardev.Le '''schéma 1''' résume ce fonctionnement.
  +
  +
  +
[[File:QemuAndUI.png |thumb| schéma 1 : Interface entre Qemu et l'UI‎]]
   
Fonctions disponibles
 
*Sortie basique pin par pin. La sortie est réalisée grâce aux chardev proposés par Qemu. Ainsi, lorsque qu'une pin change d'état, un message contenant le nouvel état est envoyé via le chardev.
 
   
 
== Glossaire des acronymes ==
 
== Glossaire des acronymes ==

Revision as of 12:04, 25 April 2012

Émulation de la carte STM32L-Discovery avec Qemu

Enseignant:

  • Olivier Richard

Etudiants:

  • CLAVELIN Aurélien
  • EID Timothée
  • MERCIER Michael

Le but de ce projet est de d'ajouter le support de la carte STM32L-Discovery dans le logiciel de virtualisation Qemu. Il fait suite au projet de l'année dernière (fiche projet) basé lui aussi sur Qemu mais portant sur la carte Stellaris Luminary Lm3s6965.

Qemu

Voir Qemu

Fichiers

Afin d'émuler la carte STM32L-Discovery les fichiers suivant on été ajoutés au dossier src/hw de Qemu :

  • stm32.c pour décrire la carte dans son ensemble
  • stm32_gpio.c pour les gpio
  • stm32_button.c pour les boutons
  • stm32_led.c pour les led
  • stm32_rcc.c pour le module RCC (ce module n'est que très partiellement émuler et donc non fonctionnel)

Composants émulés

Processeur et Mémoire

Le processeur utilisé par la carte est un processeur Cortex-M3 r1p1 (doc) déjà supporté par Qemu.

Pour initialiser celui-ci, il est nécessaire d'utiliser la fonction

MemoryRegion *address_space_mem = get_system_memory();
pic = armv7m_init(address_space_mem, flash_size, sram_size, kernel_filename, cpu_model);

où pic est un tableau de qemu_irq (voir Qemu#Assemblage) correspondant aux fils d'entrer dans le processeur. Dans notre cas les taille des différentes mémoires sont :

  • RAM: 16 KBits
  • Flash: 128 Kbits

GPIO

L'émulation des GPIO est gérée par le fichier stm32_gpio.c. Les GPIO sont les connecteur de base de la carte. Il permet de communiquer avec le bouton USER 0 et les LEDs.

Périphériques

L'émulation ne porte pour l'instant que sur les deux LEDs (stm32_led.c) et le bouton USER0 (stm32_button.c) qui communique avec l'extérieur de Qemu grâçe à chardev .

Interface graphique

Une interface graphique utilisateur (UI) en python à été développer afin de permettre à l'utilisateur une meilleur prise en main. Qemu se connecte à l'UI par des sockets fournis par les modules des deux LED et du bouton via chardev.Le schéma 1 résume ce fonctionnement.


schéma 1 : Interface entre Qemu et l'UI‎


Glossaire des acronymes

Vous trouverez le glossaire ici