- Configuración de pantalla:
640x480
pixels, formatoARGB
32 bits. - El registro
X0
contiene la dirección base del FrameBuffer (Pixel 1). - El código de cada consigna debe ser escrito en el archivo app.s.
- El archivo start.s contiene la inicialización del FrameBuffer (NO EDITAR), al finalizar llama a app.s.
- El código de ejemplo pinta toda la pantalla un solo color.
-
app.s Este archivo contiene a apliación. Todo el hardware ya está inicializado anteriormente.
-
start.s Este archivo realiza la inicialización del hardware.
-
Makefile Archivo que describe como construir el software (que ensamblador utilizar, que salida generar, etc).
-
memmap Este archivo contiene la descripción de la distribución de la memoria del programa y donde colocar cada sección.
-
README.md este archivo.
El archivo Makefile contiene lo necesario para construir el proyecto. Se pueden utilizar otros archivos .s si les resulta práctico para emprolijar el código y el Makefile los ensamblará.
Para correr el proyecto ejecutar
$ make runQEMU
Esto construirá el código y ejecutará qemu para su emulación.
Si qemu se queja con un error parecido a qemu-system-aarch64: unsupported machine type
, prueben cambiar raspi3
por raspi3b
en la receta runQEMU
del Makefile (línea 23 si no lo cambiaron).
Los containers son maquinas virtuales livianas que permiten correr procesos individuales como el qemu y gcc.
Para seguir esta guia primero tienen que instala docker y asegurarse que el usuario que vayan a usar tenga permiso para correr docker (ie dockergrp) o ser root
- Para construir el container hacer
docker build -t famaf/rpi-qemu .
- Para arrancarlo
xhost +
docker run -dt --name rpi-qemu --rm -v $(pwd):/local --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix -v "$HOME/.Xauthority:/root/.Xauthority:rw" famaf/rpi-qemu
- Para correr el emulador para el ejericico 1:
docker exec -d rpi-qemu make runQEMU -C ./ejercicio1/
- Para correr el emulador para el ejericico 2:
docker exec -d rpi-qemu make runQEMU -C ./ejercicio2/
- Para debuggear con gdb (por ej. el ejercicio 1) tienen que correr el qemu en modo debug:
docker exec -d rpi-qemu make runQEMU_debug -C ./ejercicio1/
y luego el docker en modo iterativo y adentro el gdb:
docker exec -it rpi-qemu make runGDB -C ./ejercicio1/
- Para terminar el container
docker kill rpi-qemu
# Correr el container en modo interactivo
docker run -it --rm -v $(pwd):/local --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix -v "$HOME/.Xauthority:/root/.Xauthority:rw" famaf/rpi-qemu
# Correr un shell en el container
docker exec -it rpi-qemu /bin/bash
En MacOS primero tienen que instalar un X server (se recomienda XQuartz). Además, se deben permitir las conexiones de clientes de red, esto se hace entrando a los ajustes del XQuartz, en la pestaña de Seguridad. Luego los comandos para correr el docker, el emulador, el gdb, etc. son iguales que en linux