<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eidt</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eidt"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Eidt"/>
	<updated>2026-06-02T17:22:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4866</id>
		<title>Proj-2011-2012-qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4866"/>
		<updated>2012-03-26T15:13:00Z</updated>

		<summary type="html">&lt;p&gt;Eidt: /*Projet Qemu et cartes ARM Cortex-M3*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet Qemu et cartes ARM Cortex-M3 =&lt;br /&gt;
&lt;br /&gt;
Enseignant: &lt;br /&gt;
*Olivier Richard&lt;br /&gt;
&lt;br /&gt;
Etudiants:&lt;br /&gt;
*CLAVELIN Aurélien&lt;br /&gt;
*EID Timothée&lt;br /&gt;
*MERCIER Michael&lt;br /&gt;
&lt;br /&gt;
Le but de ce projet est de d&#039;ajouter le support de la carte STM32L-Discovery dans le logiciel de virtualisation Qemu.&lt;br /&gt;
Il fait suite au projet de l&#039;année dernière ([[Fiche_Projet_Qemu_Stellaris |fiche projet]]) basé lui aussi sur Qemu mais portant sur la carte [[Stellaris Luminary Lm3s6965]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Qemu ==&lt;br /&gt;
Voir [[Qemu]]&lt;br /&gt;
&lt;br /&gt;
== Composants émulés ==&lt;br /&gt;
=== Processeur ===&lt;br /&gt;
Le processeur utilisé par la carte est un processeur Cortex-M3 r1p1 ([http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337i/DDI0337I_cortexm3_r2p1_trm.pdf doc]) déjà supporté par Qemu.&lt;br /&gt;
&lt;br /&gt;
Pour initialiser celui-ci, il est nécessaire d&#039;utiliser la fonction&lt;br /&gt;
 MemoryRegion *address_space_mem = get_system_memory();&lt;br /&gt;
 pic = armv7m_init(address_space_mem, flash_size, sram_size, kernel_filename, cpu_model);&lt;br /&gt;
&lt;br /&gt;
=== Mémoire ===&lt;br /&gt;
*RAM: 16 KBits&lt;br /&gt;
*Flash: 128 Kbits&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
L&#039;émulation des [http://fr.wikipedia.org/wiki/General_Purpose_Input/Output GPIO] est gérée par le fichier stm32_gpio.c. &lt;br /&gt;
&lt;br /&gt;
Fonctions disponibles&lt;br /&gt;
*Sortie basique pin par pin. La sortie est réaliser grâce aux chardev proposés par Qemu. Ainsi, lorsque qu&#039;une pin change d&#039;état, un message contenant le nouvel état est envoyé via le chardev.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Glossaire des acronymes ==&lt;br /&gt;
Vous trouverez le glossaire [[Proj-2011-2012-qemu-GlossaireSTM32 |ici]]&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4865</id>
		<title>Proj-2011-2012-qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4865"/>
		<updated>2012-03-26T14:47:19Z</updated>

		<summary type="html">&lt;p&gt;Eidt: /* Installation de Qemu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Projet Qemu et cartes ARM Cortex-M3 =&lt;br /&gt;
&lt;br /&gt;
Enseignant: &lt;br /&gt;
*Olivier Richard&lt;br /&gt;
&lt;br /&gt;
Etudiants:&lt;br /&gt;
*CLAVELIN Aurélien&lt;br /&gt;
*EID Timothée&lt;br /&gt;
*MERCIER Michael&lt;br /&gt;
&lt;br /&gt;
Le but de ce projet est de d&#039;ajouter le support de la carte STM32L-Discovery dans le logiciel de virtualisation Qemu.&lt;br /&gt;
Il fait suite au projet de l&#039;année dernière ([[Fiche_Projet_Qemu_Stellaris |fiche projet]]) basé lui aussi sur Qemu mais portant sur la carte [[Stellaris Luminary Lm3s6965]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Qemu ==&lt;br /&gt;
&lt;br /&gt;
Voir [[Qemu]]&lt;br /&gt;
&lt;br /&gt;
== Glossaire des acronymes (en travaux) ==&lt;br /&gt;
Vous trouverez le glossaire [[Proj-2011-2012-qemu-GlossaireSTM32 |ici]]&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Qemu&amp;diff=4864</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Qemu&amp;diff=4864"/>
		<updated>2012-03-26T14:45:10Z</updated>

		<summary type="html">&lt;p&gt;Eidt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un émulateur de référence, la page wikipédia [http://en.wikipedia.org/wiki/QEMU]&lt;br /&gt;
&lt;br /&gt;
== Installation de qemu ==&lt;br /&gt;
&lt;br /&gt;
*Récuperer la dernière version de qemu [http://wiki.qemu.org/Download ici] (v1.0 lors de la rédaction de cet article)&lt;br /&gt;
*Décompresser le dossier Qemu-x.xtar.gz&lt;br /&gt;
*Configuration de compilation&lt;br /&gt;
Dans le dossier extrait, taper la commande :&lt;br /&gt;
 ./configure --target-list=arm-softmmu --python=/usr/bin/python2.7&lt;br /&gt;
La première option permet de compiler qemu uniquement pour l&#039;émulation de programmes destinés à une architecture [http://fr.wikipedia.org/wiki/Architecture_ARM ARM].&lt;br /&gt;
La deuxième option permet de forcer l&#039;utilisation de la version 2.7 de [http://fr.wikipedia.org/wiki/Python_%28langage%29 python].&lt;br /&gt;
*Compiler les sources&lt;br /&gt;
Executer la commande :&lt;br /&gt;
 make&lt;br /&gt;
Le résultat de la compilation sera placé dans un sous-répertoire en fonction des options utilisées dans la configuation (Ex: arm-softmmu)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Composants ==&lt;br /&gt;
=== Assemblage ===&lt;br /&gt;
Qemu est un programme modulaire. Chaque fichier représente l&#039;émulation d&#039;un périphérique.&lt;br /&gt;
Ex:&lt;br /&gt;
*pl022.c : [http://fr.wikipedia.org/wiki/Port_s%C3%A9rie Port série] synchrone&lt;br /&gt;
*pl050.c : Interface clavier&lt;br /&gt;
*pl061.c : [http://fr.wikipedia.org/wiki/GPIO GPIO]&lt;br /&gt;
&lt;br /&gt;
Pour émuler un système complet, il faut donc le constituer composant par composant.&lt;br /&gt;
Ex:&lt;br /&gt;
 dev = sysbus_create_varargs(&amp;quot;device-name&amp;quot;, 0x40020000, irq1, irq2, irq3, NULL);&lt;br /&gt;
 adc = qdev_get_gpio_in(dev, 0);&lt;br /&gt;
&lt;br /&gt;
=== Mémoire ===&lt;br /&gt;
Pour fonctionner, un composant peut avoir besoin d&#039;utiliser une zone de la mémoire fournie par le système. L&#039;adresse de cette zone est définie lors de l&#039;appel à la fonction sysbus_create_*.&lt;br /&gt;
Une fonction d&#039;initialisation dans le composant est alors chargée de contacter qemu afin qu&#039;il lui délègue la gestion de cette zone.&lt;br /&gt;
 iomemtype = cpu_register_io_memory(lectureHandler, ecritureHandler, deviceData, NATIVE_ENDIAN);&lt;br /&gt;
 sysbus_init_mmio(dev, 0x1000, iomemtype);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compilation et lancement du programme émulé==&lt;br /&gt;
=== Emulation ===&lt;br /&gt;
*Compiler les sources du programme (dans le cas ou l&#039;architecture du système hote est différente de cette du système cible, voir la rubrique: cross compilation)&lt;br /&gt;
*Lancement de Qemu (dans le cas d&#039;une cible [http://fr.wikipedia.org/wiki/Architecture_ARM ARM])&lt;br /&gt;
 ./qemu-system-arm -M stm32l152rbt6 -nographic -kernel ./main.bin&lt;br /&gt;
Options&lt;br /&gt;
*-M xxxx : Sélection de la machine émulée&lt;br /&gt;
*--kernel xxxx : Programme à émuler&lt;br /&gt;
&lt;br /&gt;
=== Cross compilation ===&lt;br /&gt;
Dans le cas ou le système émulé n&#039;a pas la même architecture que le système hôte, il est nécessaire d&#039;utiliser un utilitaire de cross-compilation à la place de l&#039;utilitaire de compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Qemu et GDB ==&lt;br /&gt;
=== Lancement en mode debug ===&lt;br /&gt;
Il est possible d&#039;interfacer Qemu avec [http://fr.wikipedia.org/wiki/GNU_Debugger GDB]. Ainsi, il sera aisé de suivre le déroulement du programme émulé.&lt;br /&gt;
 ./qemu-system-arm -M stm32l152rbt6 -nographic -kernel ./main.bin -S -gdb tcp::51234&lt;br /&gt;
Options:&lt;br /&gt;
*-S : Active le mode debug&lt;br /&gt;
*-gdb tcp::&amp;lt;port&amp;gt; : Spécifie l&#039;interface de débbogage&lt;br /&gt;
&lt;br /&gt;
=== Connexion avec GDB ===&lt;br /&gt;
Il suffit maintenant de connecter gdb à qemu.&lt;br /&gt;
 arm-none-eabi&lt;br /&gt;
 target remote localhost:51234&lt;br /&gt;
 load ./main.elf&lt;br /&gt;
 continue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CharDev ==&lt;br /&gt;
=== Présentation ===&lt;br /&gt;
Qemu offre un système de communication avec l&#039;environnement exterieur: les char devices.&lt;br /&gt;
Ce sont des flux offert par qemu pour qu&#039;un composant puisse lire ou écrire.&lt;br /&gt;
Lors du lancement de l&#039;émulation, il sera possible de connecter ces flux à des structure informatique (telnet, socket, fichier, ...)&lt;br /&gt;
D&#039;un coté il faudra implémenté le chardev dans un composant de qemu, puis de l&#039;autre coté il faudra fournir au démarrage de l&#039;application les connexion nécessaires aux chardev.&lt;br /&gt;
&lt;br /&gt;
=== Développement ===&lt;br /&gt;
*Initialisation du chardev&lt;br /&gt;
 chrdev = qemu_chr_find(&amp;quot;idCharDev&amp;quot;);&lt;br /&gt;
 if (s-&amp;gt;chr) {&lt;br /&gt;
     chr_add_handlers(chrdev, canReceiveHandler, receiveHandler, eventHandler, deviceData);&lt;br /&gt;
 }&lt;br /&gt;
*Envoi de caractères dans le chardev. Le buffer est un tableau de uint8_t&lt;br /&gt;
 qemu_chr_fe_write(chrdev, buffer, bufferSize);&lt;br /&gt;
&lt;br /&gt;
=== Utilisation ===&lt;br /&gt;
La documentation de qemu expose les différentes options à passer pour connecter les chardev:&lt;br /&gt;
[http://wiki.qemu.org/download/qemu-doc.html UserDoc]&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4234</id>
		<title>Proj-2011-2012-qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4234"/>
		<updated>2012-01-17T14:59:09Z</updated>

		<summary type="html">&lt;p&gt;Eidt: /* Qemu et cartes ARM Cortex-M3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qemu et cartes ARM Cortex-M3 ==&lt;br /&gt;
&lt;br /&gt;
Enseignant: Olivier Richard&lt;br /&gt;
&lt;br /&gt;
*Etudiants:&lt;br /&gt;
**CLAVELIN Aurélien, &lt;br /&gt;
**EID Timothée, &lt;br /&gt;
**MERCIER Michael&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4233</id>
		<title>Proj-2011-2012-qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4233"/>
		<updated>2012-01-17T14:58:13Z</updated>

		<summary type="html">&lt;p&gt;Eidt: /* Qemu et cartes ARM Cortex-M3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qemu et cartes ARM Cortex-M3 ==&lt;br /&gt;
&lt;br /&gt;
Enseignant: Olivier Richard&lt;br /&gt;
&lt;br /&gt;
Etudiants:&lt;br /&gt;
* CLAVELIN Aurélien, &lt;br /&gt;
* EID Timothée, &lt;br /&gt;
* MERCIER Michael&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4226</id>
		<title>Proj-2011-2012-qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4226"/>
		<updated>2012-01-17T14:53:49Z</updated>

		<summary type="html">&lt;p&gt;Eidt: /* Qemu et cartes ARM Cortex-M3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qemu et cartes ARM Cortex-M3 ==&lt;br /&gt;
&lt;br /&gt;
Enseignant: Olivier Richard&lt;br /&gt;
&lt;br /&gt;
Etudiants:&lt;br /&gt;
CLAVELIN Aurélien, &lt;br /&gt;
EID Timothée, &lt;br /&gt;
MERCIER Michael&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4225</id>
		<title>Proj-2011-2012-qemu</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Proj-2011-2012-qemu&amp;diff=4225"/>
		<updated>2012-01-17T14:53:08Z</updated>

		<summary type="html">&lt;p&gt;Eidt: Created page with &amp;quot;== Qemu et cartes ARM Cortex-M3 ==  Enseignant: Olivier Richard  Etudiants: CLAVELIN Aurélien EID Timothée MERCIER Michael&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qemu et cartes ARM Cortex-M3 ==&lt;br /&gt;
&lt;br /&gt;
Enseignant: Olivier Richard&lt;br /&gt;
&lt;br /&gt;
Etudiants:&lt;br /&gt;
CLAVELIN Aurélien&lt;br /&gt;
EID Timothée&lt;br /&gt;
MERCIER Michael&lt;/div&gt;</summary>
		<author><name>Eidt</name></author>
	</entry>
</feed>