web-dev-qa-db-fra.com

Comment créer une QEMU ARM machine avec des périphériques personnalisés et des cartes de mémoire?

J'écris un code pour le processeur Cortex-M3 et j'effectue des tests unitaires à l'aide de qemu-arm binary. Pour l'instant, tout fonctionne bien. Mais je me demande si je suis capable de tester tout le système en utilisant qemu-system-arm? Je veux dire, je veux écrire une "machine" personnalisée pour qemu où je vais définir la mappe de mémoire souhaitée et éventuellement une imitation logicielle des périphériques souhaités. Existe-t-il des exemples de ce module? J'ai trouvé très peu d'informations à ce sujet. J'ai lu du code source dans le répertoire hw de l'arborescence source de qemu, mais il n'a presque pas été commenté, et je ne suis toujours pas sûr de comprendre comment ajouter une nouvelle machine à qemu et comment ajouter un périphérique à l'espace d'adressage.

17
mucka

Pour ajouter votre propre machine, vous devez au moins créer un fichier source contenant les paramètres et les périphériques de votre machine. Après cela, ajoutez une entrée dans Makefile.objs, sous qemu/hw/arm /. Entrée de la machine STM32 P103 .

Prenons comme exemple la carte de développement Olimex STM32 P103: Code de la carte de développement Olimex STM32 P103 . Aux lignes 105 et 106, nous avons flash_size et ram_size. Dans les lignes 114 et 115, le code ajoute une LED connectée à la broche 0 de GPIO A. À la ligne 130, nous avons la description de la machine, "Carte de développement Olimex STM32 p103". À la ligne 131, la fonction init machine: stm32_p103_init. Un autre exemple de machine plus complète: Code machine Pebble

A propos des périphériques, ils sont instanciés dans chaque code de famille, en considérant le cas stm32. Famille stm32f1: stm32f1xx.c , famille stm32f2: stm32f2xx.c, famille stm32f4: stm32f4xx.c. Le périphérique lui-même est implémenté dans un pilote qui porte généralement un nom évocateur: stm32f2xx_adc.c, stm32f2xx_crc.c, etc. Exemple de patch qui ajoute un nouveau périphérique: Ajout d’ADC à STM32 .

20
ViniCoder

Vous pouvez utiliser Jumper Virtual Lab pour la simulation, consultez ce blog post de ARM mBed.

0
Yaniv Nissenboim