una rango proceso microcontrolador memorias memoria mapa lineas hacer electronica diseño direcciones direccion dibujar como bloques arm qemu cortex-m

arm - rango - mapa de memoria de un proceso



¿Cómo crear una máquina QEMU ARM con periféricos personalizados y mapas de memoria? (2)

Estoy escribiendo un código para Cortex-M3 cpu y estoy realizando pruebas unitarias utilizando el binario qemu-arm . Por ahora todo funciona bien. Pero me pregunto si puedo probar todo el sistema utilizando qemu-system-arm ? Quiero decir, quiero escribir una "máquina" personalizada para qemu donde definiré el mapa de memoria deseado y, finalmente, alguna imitación de software de los periféricos deseados, ¿hay algunos ejemplos de dicho módulo? Encontré muy poca información sobre esto. He leído algo de código fuente en el directorio hw en el árbol de fuentes qemu, pero casi no tiene comentarios, ¿y aún no estoy seguro de saber cómo agregar una nueva máquina a qemu y cómo agregar periféricos al espacio de direcciones?


Para agregar su propia máquina, necesita al menos crear un archivo fuente, que contenga los parámetros y periféricos de su máquina. Después de eso, agregue una entrada dentro de Makefile.objs, bajo qemu / hw / arm /. Entrada de la máquina STM32 P103 .

Tomemos como ejemplo la placa de desarrollo Olimex STM32 P103: código de la placa de desarrollo Olimex STM32 P103 . En las líneas 105 y 106, tenemos flash_size y ram_size. En las líneas 114 y 115, el código agrega un LED conectado al pin GPIO A 0. En la línea 130 tenemos la descripción de la máquina, "Olimex STM32 p103 Dev Board". En la línea 131, la máquina inicia la función: stm32_p103_init. Otro ejemplo de una máquina más completa: el código de la máquina Pebble .

Acerca de los periféricos, se crean instancias en cada código de familia, considerando el caso stm32. stm32f1 familia: stm32f1xx.c , stm32f2 familia: stm32f2xx.c, stm32f4 familia: stm32f4xx.c. El periférico en sí se implementa en un controlador que normalmente tiene un nombre sugerente: stm32f2xx_adc.c, stm32f2xx_crc.c y así sucesivamente. Ejemplo de un parche que agrega un nuevo periférico: Adición de ADC a STM32 .