Ich schreibe einen Code für die Cortex-M3-CPU und führe Unit-Tests mit qemu-arm
binary durch. Jetzt funktioniert alles gut. Aber ich frage mich, ob ich das ganze System mit qemu-system-arm
testen kann? Ich meine, ich will benutzerdefinierte "Maschine" für qemu schreiben, wo ich gewünschte Gedächtniskarte und schließlich einige Software-Imitation von gewünschten Peripheriegeräten definieren werde, gibt es einige Beispiele solcher Module? Ich habe sehr wenig Information darüber gefunden. Ich habe Quellcode in hw
Verzeichnis in qemu Source Tree gelesen, aber es ist fast alles unkommentiert, und ich bin immer noch nicht sicher, ob ich verstehe, wie man neue Maschine zum qemu hinzufügt und wie Peripherie an den Adressraum anfügt?
Um Ihre eigene Maschine hinzuzufügen, müssen Sie mindestens eine Quelldatei erstellen, die die Parameter und Peripheriegeräte Ihrer Maschine enthält. Danach fügen Sie einen Eintrag in Makefile.objs, unter qemu / hw / arm / hinzu. STM32 P103-Maschineneintrag .
Nehmen wir als Beispiel das Entwicklungs-Board Olimex STM32 P103: Code des Entwicklungskits Olimex STM32 P103 . In den Zeilen 105 und 106 haben wir flash_size und ram_size. In den Zeilen 114 und 115 fügt der Code eine LED hinzu, die mit GPIO A Pin 0 verbunden ist. In Zeile 130 haben wir die Maschinenbeschreibung "Olimex STM32 p103 Dev Board". In Zeile 131, die Maschine init Funktion: stm32_p103_init. Ein weiteres Beispiel für eine vollständigere Maschine: Pebble-Maschinencode .
Über Peripheriegeräte werden sie in jedem Familiencode instanziiert, wobei der stm32-Fall berücksichtigt wird. stm32f1-Familie: stm32f1xx.c , stm32f2-Familie: stm32f2xx.c, stm32f4-Familie : stm32f4xx.c. Das Peripheriegerät selbst ist in einem Treiber implementiert, der typischerweise einen suggestiven Namen hat: stm32f2xx_adc.c, stm32f2xx_crc.c und so weiter. Beispiel eines Patches, der neue Peripheriegeräte hinzufügt: Hinzufügen von ADC zu STM32 .