ZPUTA (Applicazione di Test ZPU)
ZPUTA
Originariamente, gli sviluppi di ZPUTA/zOS miravano solo all'architettura ZPU, e avevano due metodi di esecuzione primari:
- come applicazione avviata da IOCP,
- in modalita’ autonoma come firmware di avvio della ZPU Evo.
Recentemente, zOS/ZPUTA e' stato portato sull'architettura ARM Cortex-M4, per l'uso con il Freescale K64F nel progetto tranZPUterSW. Poiche' il K64F e' un CPU/SoC ad architettura fissa, esiste un solo metodo di esecuzione: 'autonomo'.
L'idea dietro ZPUTA e' principalmente il testing, ottenere accesso interno a un sistema hardware embedded e eseguire codelet per testare o sperimentare funzionalita' hardware. Ogni test verrebbe costruito come funzione interna e come app esterna, il che era cruciale a causa delle schede di sviluppo utilizzate.
Per il funzionamento, ZPUTA richiede come minimo una connessione seriale (fisica o USB virtuale), preferibilmente due per l'output di debug. Sulla connessione seriale primaria, e' preferibile avere collegato un pacchetto di emulazione terminale ANSI/VT100.
Utilizzo di ZPUTA
Prima di ZPUTA, ho creato un programma di bootstrap chiamato IOCP (I/O Control Program) che operava ai livelli hardware piu’ bassi ed era in grado di avviare programmi piu’ sofisticati, ad esempio ZPUTA. IOCP e’ sensibile alle dimensioni e progettato per il bootstrap da qualsiasi dispositivo di archiviazione, e includendo una scheda SD e Petit FatFS puo’ eseguire il bootstrap da una scheda SD.
Riga di comando
Il primo incontro con il sistema operativo e’ un messaggio di accesso che mostra CPU, versione, ecc. e presenta un prompt per l’inserimento dei comandi:

Le mappature dei tasti readline e la lista completa dei comandi per IO su disco, buffer disco, file system, memoria, hardware, test di prestazione, esecuzione programmi e applicazioni sono identiche alla versione inglese e sono elencate li’.
Applicazioni
Dettagli tecnici
Organizzazione della memoria
Le mappe di memoria di IOCP e ZPUTA sono identiche alla versione inglese e sono presentate li’.
Interfaccia dell'applicazione
Come la maggior parte dei sistemi operativi, ZPUTA fornisce un’API che un’applicazione opportunamente compilata puo’ utilizzare per ridurre le proprie dimensioni e complessita’ e riutilizzare le funzioni all’interno del sistema operativo come la connessione seriale.
Piuttosto che progettare un set API personalizzato, era piu’ sensato esporre i metodi all’interno di ZPUTA per l’uso dell’applicazione, ad esempio printf. Questo viene ottenuto creando una tabella di salto a un vettore fisso all’interno di ZPUTA.
La tabella completa dei vettori API e gli esempi di codice sono identici alla versione inglese.
Configurazione e compilazione automatizzate (consigliato)
build.sh, che assembla/compila IOCP, ZPUTA e le app per una determinata CPU in un unico passaggio. ZPUTA puo' essere compilato come singola immagine autonoma con la propria funzionalita' incorporata (utile quando non e' presente una scheda SD) oppure suddiviso con gli applet sulla scheda SD. Sono coinvolte due toolchain e gli script di configurazione le forniscono entrambe:
| Toolchain | CPU di destinazione | Origine |
|---|---|---|
ZPU zpu-elf-gcc 3.4.2 |
Small Medium Flex Evo EvoMin (ZPU) |
installata in /opt/zpu (da ZPU_TOOLCHAIN_URL) |
ARM arm-none-eabi |
K64F (Kinetis / Teensy 3.5) |
inclusa nel repository in tools/arm (nessuna installazione) |
Poiche’ entrambe le toolchain sono binari Linux / cross, la compilazione viene eseguita nativamente su Linux, in Docker su macOS e tramite WSL1 su Windows:
| Script | Piattaforma | Note |
|---|---|---|
setup_zSoft.sh |
Linux (nativo) / macOS (Docker) | Installa gli strumenti di build di base + la toolchain ZPU; su macOS compila all’interno dell’immagine Docker zsoft-build:latest. |
setup_zSoft_windows.cmd |
Windows 10 / 11 | Launcher da doppio clic che richiama lo script PowerShell sottostante. |
setup_zSoft_windows_native.ps1 |
Windows 10 / 11 (WSL1) | Configura WSL1 (distribuzione predefinita Ubuntu-24.04) ed esegue al suo interno la configurazione Linux. |
setup_zSoft_wsl1.sh |
all’interno di WSL1 | Il passo di configurazione Linux richiamato automaticamente nella distribuzione WSL1. |
Linux / macOS — setup_zSoft.sh
chmod +x setup_zSoft.sh
./setup_zSoft.sh
Windows 10 / 11 — setup_zSoft_windows_native.ps1 — doppio clic su setup_zSoft_windows.cmd, oppure da un prompt PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_zSoft_windows_native.ps1
La configurazione clona ZSOFT_REPO_URL (predefinito https://git.eaw.app/eaw/zSoft.git) in ~/zSoft. Una volta terminata, si compila ZPUTA con (build.sh seleziona automaticamente native / Docker / WSL1 per l’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 ...)
build/ e build/SD/ — la ROM di avvio (BOOT.ROM / BOOTTINY.ROM), il boot loader IOCP_<func>_<addr>.bin e il file .bin di ZPUTA, oltre ai binari delle app in bin/ pronti per essere copiati su una scheda SD formattata FAT.
Override utili delle variabili d’ambiente:
| Variabile | Scopo |
|---|---|
ZSOFT_REPO_URL |
Repository da clonare (predefinito https://git.eaw.app/eaw/zSoft.git). |
ZSOFT_DIR |
Compila all’interno di un checkout esistente invece di clonare. |
ZPU_TOOLCHAIN_URL |
Posizione del tarball della toolchain zpu-elf-gcc 3.4.2 installata in /opt/zpu. |
ZSOFT_BUILD_IMAGE |
Immagine Docker usata per la compilazione su macOS (predefinita zsoft-build:latest). |
ZSOFT_WSL_DISTRO |
Nome della distribuzione WSL1 su Windows (predefinito Ubuntu-24.04). |
ZSOFT_ASSUME_YES=1 |
Accetta tutti i prompt in modo non interattivo (installazioni automatiche / CI). |
build.sh — e' documentata nella sezione Build del software immediatamente sotto.
Build del software
Questa sezione mostra come costruire un kernel ZPUTA di base. Il punto di partenza per il build di ZPUTA e’ lo script ‘build.sh’.
Percorsi
La tabella completa dei percorsi e la documentazione del build tree sono identiche alla versione inglese.
Strumenti
Tutto lo sviluppo e’ stato effettuato su Linux, in particolare Debian/Ubuntu. Il software necessario include la ZPU GCC ToolChain e opzionalmente Arduino e Teensyduino.
Build.sh
La documentazione completa di build.sh con tutti i parametri e gli esempi si trova nella versione inglese.
Ringraziamenti
I ringraziamenti e le licenze sono identici alla versione inglese.
Licenze
La licenza FreeBSD
Questo progetto e’ rilasciato sotto la licenza FreeBSD. I dettagli si trovano nella versione inglese.
La GNU Public License v3
Parti di questo progetto sono rilasciate sotto la GPLv3. I dettagli si trovano nella versione inglese.