ZPUTA (Aplicacion de Prueba ZPU)

English

ZPUTA

ZPUTA comenzo como una simple aplicacion de prueba para verificar los disenos de hardware de la ZPU Evo y del SoC durante su desarrollo. El nombre deriva de ZPU Test Application. Se ha desarrollado con el tiempo desde un programa simple a algo con un grado de sofisticacion similar a un sistema operativo. Puede construirse como una imagen de firmware unica con toda la funcionalidad incorporada o dividirse, con la mayor parte de la funcionalidad residiendo en un dispositivo de almacenamiento conectado como una tarjeta SD. zOS fue derivado de ZPUTA y tuvo gran parte de la funcionalidad interna eliminada, confiando en el almacenamiento externo, lo que lo hace mas adecuado para ser incorporado en proyectos finales.

Originalmente, los desarrollos de ZPUTA/zOS se dirigian solo a la arquitectura ZPU, y tenian dos metodos de ejecucion principales:
  • como aplicacion arrancada por IOCP,
  • de forma autonoma como firmware de inicio de la ZPU Evo.
El modo se elige en la configuracion y la funcionalidad es identica. Cuando se arranca como aplicacion desde IOCP, zOS se almacena en una tarjeta SD y se carga durante el arranque. En modo autonomo, zOS se almacena en la flash integrada (o BRAM preconfigurada como ROM).

Recientemente, zOS/ZPUTA se ha portado a la arquitectura ARM Cortex-M4, para su uso con el Freescale K64F en el proyecto tranZPUterSW. Dado que el K64F es una CPU/SoC de arquitectura fija, solo existe un metodo de ejecucion: 'autonomo'.

La idea detras de ZPUTA es principalmente la prueba, obtener acceso interno a un sistema de hardware embebido y ejecutar codelets para probar o experimentar con funcionalidades de hardware. Cada prueba se construiria como funcion interna y como app externa, lo cual era crucial debido a las placas de desarrollo utilizadas.

Para su funcionamiento, ZPUTA requiere como minimo una conexion serial (fisica o USB virtual), preferiblemente dos para la salida de depuracion. En la conexion serial principal, es preferible tener conectado un paquete de emulacion de terminal ANSI/VT100.

Uso de ZPUTA

La interfaz de ZPUTA se escribio considerando que solo esta disponible un terminal textual serial. Algunos componentes como el editor requieren capacidades avanzadas, y para este proposito se eligio la probada emulacion VT100 como candidato adecuado. La interaccion es basada en teclado y texto (nada de bonitas interfaces GUI!).

Antes de ZPUTA, cree un programa de arranque llamado IOCP (I/O Control Program) que operaba a los niveles de hardware mas bajos y era capaz de arrancar programas mas sofisticados, por ejemplo ZPUTA. IOCP es sensible al tamano y disenado para arrancar desde cualquier dispositivo de almacenamiento, y al incluir una tarjeta SD y Petit FatFS puede arrancar desde una tarjeta SD.

ZPUTA mantendra su proposito original -- la prueba -- mientras que zOS se convertira con el tiempo en un sistema operativo refinado para mis propios proyectos.

Linea de comandos

El primer encuentro con el sistema operativo es un mensaje de inicio de sesion que muestra CPU, version, etc. y presenta un prompt para la entrada de comandos:

ZPUTA Startup Screen

La interaccion con el sistema operativo no difiere de MSDOS -- se escribe un comando y se recibe una respuesta. La linea de comandos de ZPUTA no es un interprete de shell, sino solo una interfaz de texto simple con funcionalidad readline simplificada e historial.

Las asignaciones de teclas readline y la lista completa de comandos para IO de disco, buffer de disco, sistema de archivos, memoria, hardware, pruebas de rendimiento, ejecucion de programas y aplicaciones son identicas a la version en ingles y se enumeran alli.

Aplicaciones

Las aplicaciones proporcionadas por ZPUTA se encuentran en una tarjeta SD. La referencia completa de comandos se encuentra en la [version en ingles](/zputa/).

Detalles tecnicos

Esta seccion pretende proporcionar algunos de los detalles internos de la aplicacion. Mucha de esta informacion es identica en zOS, pero a medida que zOS madure, habra diferencias significativas.

Organizacion de la memoria

Los mapas de memoria de IOCP y ZPUTA son identicos a la version en ingles y se presentan alli.

Interfaz de la aplicacion

Como la mayoria de los sistemas operativos, ZPUTA proporciona una API que una aplicacion debidamente compilada puede utilizar para reducir su tamano y complejidad y reutilizar funciones dentro del sistema operativo como la conexion serial.

En lugar de disenar un conjunto de API personalizado, era mas sensato exponer los metodos dentro de ZPUTA para uso de la aplicacion, por ejemplo printf. Esto se logra creando una tabla de saltos en un vector fijo dentro de ZPUTA.

La tabla completa de vectores API y los ejemplos de codigo son identicos a la version en ingles.

Configuracion y compilacion automatizadas (recomendado)

La forma recomendada de compilar ZPUTA es el script de configuracion automatizado para tu plataforma. Comprueba e instala los prerrequisitos, instala la cadena de herramientas ZPU, clona el repositorio (si no estas ya dentro de una copia de trabajo) y ofrece ejecutar la primera compilacion — con valores predeterminados sensatos que puedes aceptar pulsando Enter. Cada script es autonomo: copia unicamente el archivo correspondiente a tu plataforma y ejecutalo. Los pasos manuales mas abajo son para usuarios avanzados, recompilaciones parciales y CI.
La compilacion se controla mediante build.sh, que ensambla/compila IOCP, ZPUTA y las apps para una CPU elegida en una sola pasada. ZPUTA puede compilarse como una unica imagen autonoma con su funcionalidad integrada (util cuando no hay tarjeta SD) o dividida con los applets en la tarjeta SD. Intervienen dos cadenas de herramientas y los scripts de configuracion proporcionan ambas:
Cadena de herramientas CPU objetivo Origen
ZPU zpu-elf-gcc 3.4.2 Small Medium Flex Evo EvoMin (ZPU) instalada en /opt/zpu (desde ZPU_TOOLCHAIN_URL)
ARM arm-none-eabi K64F (Kinetis / Teensy 3.5) incluida en el repositorio en tools/arm (sin instalacion)

Dado que ambas cadenas de herramientas son binarios Linux / cruzados, la compilacion se ejecuta de forma nativa en Linux, en Docker en macOS y mediante WSL1 en Windows:

Script Plataforma Notas
setup_zSoft.sh Linux (nativo) / macOS (Docker) Instala las herramientas base de compilacion + la cadena de herramientas ZPU; en macOS compila dentro de la imagen Docker zsoft-build:latest.
setup_zSoft_windows.cmd Windows 10 / 11 Lanzador de doble clic que invoca el script de PowerShell siguiente.
setup_zSoft_windows_native.ps1 Windows 10 / 11 (WSL1) Configura WSL1 (distribucion predeterminada Ubuntu-24.04) y ejecuta la configuracion de Linux dentro de ella.
setup_zSoft_wsl1.sh dentro de WSL1 El paso de configuracion de Linux invocado automaticamente dentro de la distribucion WSL1.

Linux / macOS — setup_zSoft.sh

chmod +x setup_zSoft.sh
./setup_zSoft.sh

Windows 10 / 11 — setup_zSoft_windows_native.ps1 — haz doble clic en setup_zSoft_windows.cmd, o desde un simbolo de PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_zSoft_windows_native.ps1

La configuracion clona ZSOFT_REPO_URL (por defecto https://git.eaw.app/eaw/zSoft.git) en ~/zSoft. Una vez finalizada, compila ZPUTA con (build.sh selecciona automaticamente nativo / Docker / WSL1 segun el host):

./build.sh -C Evo  -O zputa      # ZPUTA for the Evo ZPU
./build.sh -C K64F -O zputa      # ZPUTA for the K64F (ARM Cortex-M4)
./build.sh -h                    # all options (-C CPU, -I IOCP, -O os, -o os ver, addresses, sizes ...)
Las salidas se generan en build/ y build/SD/ — la ROM de arranque (BOOT.ROM / BOOTTINY.ROM), el cargador de arranque IOCP_<func>_<addr>.bin y el .bin de ZPUTA, ademas de los binarios de aplicacion bin/ listos para copiar a una tarjeta SD formateada en FAT.

Modificaciones utiles de variables de entorno:

Variable Proposito
ZSOFT_REPO_URL Repositorio a clonar (por defecto https://git.eaw.app/eaw/zSoft.git).
ZSOFT_DIR Compilar dentro de una copia de trabajo existente en lugar de clonar.
ZPU_TOOLCHAIN_URL Ubicacion del tarball de la cadena de herramientas zpu-elf-gcc 3.4.2 instalada en /opt/zpu.
ZSOFT_BUILD_IMAGE Imagen Docker usada para la compilacion en macOS (por defecto zsoft-build:latest).
ZSOFT_WSL_DISTRO Nombre de la distribucion WSL1 en Windows (por defecto Ubuntu-24.04).
ZSOFT_ASSUME_YES=1 Acepta todos los prompts de forma no interactiva (instalaciones desatendidas / CI).
Si prefieres compilar a mano o estas creando una tuberia de CI, la compilacion manual — las rutas, la lista de herramientas, el arbol de compilacion y la matriz completa de flags de build.sh — esta documentada en la seccion Build del software inmediatamente debajo.


Build del software

Esta seccion muestra como construir un kernel ZPUTA basico. El punto de partida para el build de ZPUTA es el script ‘build.sh’.

Rutas

La tabla completa de rutas y la documentacion del arbol de build son identicas a la version en ingles.

Herramientas

Todo el desarrollo se realizo en Linux, en particular Debian/Ubuntu. El software necesario incluye la ZPU GCC ToolChain y opcionalmente Arduino y Teensyduino.

Build.sh

La documentacion completa de build.sh con todos los parametros y ejemplos se encuentra en la version en ingles.

Agradecimientos

Los agradecimientos y licencias son identicos a la version en ingles.

Licencias

La licencia FreeBSD

Este proyecto esta licenciado bajo la licencia FreeBSD. Los detalles se encuentran en la version en ingles.

La GNU Public License v3

Partes de este proyecto estan licenciadas bajo la GPLv3. Los detalles se encuentran en la version en ingles.