ZPUTA (ZPU-Testanwendung)

English

ZPUTA

ZPUTA begann als einfache Testanwendung zur Verifizierung von ZPU Evo und SoC-Hardware-Designs waehrend ihrer Entwicklung. Der Name leitet sich von ZPU Test Application ab. Es hat sich im Laufe der Zeit von einem einfachen Programm zu etwas mit einem Grad an Raffinesse aehnlich einem Betriebssystem entwickelt. Es kann als einzelnes Firmware-Image mit der gesamten Funktionalitaet gebaut werden oder aufgeteilt werden, wobei die meiste Funktionalitaet auf einem angeschlossenen Speichergeraet wie einer SD-Karte liegt. zOS wurde von ZPUTA abgespalten und hatte einen Grossteil der internen Funktionalitaet entfernt, wobei es sich auf den externen Speicher stuetzt, was es besser geeignet macht, in Endprojekte eingebaut zu werden.

Urspruenglich zielten die ZPUTA/zOS-Entwicklungen nur auf die ZPU-Architektur ab, und sie hatten zwei primaere Ausfuehrungsmethoden:
  • als von IOCP gebootete Anwendung,
  • eigenstaendig als ZPU Evo Startup-Firmware gebootet.
Der Modus wird in der Konfiguration gewaehlt, und die Funktionalitaet ist identisch. Wenn als Anwendung von IOCP gebootet, wird zOS auf einer SD-Karte gespeichert und beim Booten geladen. Im eigenstaendigen Modus wird zOS im Onboard-Flash (oder vorkonfiguriertem BRAM als ROM) gespeichert.

Kuerzlich wurde zOS/ZPUTA auf die ARM Cortex-M4-Architektur portiert, fuer die Verwendung mit dem Freescale K64F im tranZPUterSW-Projekt. Da der K64F eine feste Architektur-CPU/SoC ist, existiert nur eine Ausfuehrungsmethode: 'eigenstaendig'.

Die Idee hinter ZPUTA ist hauptsaechlich das Testen, den internen Zugang zu einem eingebetteten Hardwaresystem zu erhalten und Codelets auszufuehren, um Hardwarefunktionen zu testen oder auszuprobieren. Jeder Test wuerde als interne Funktion und als externe App gebaut, was aufgrund der verwendeten Entwicklungsboards von entscheidender Bedeutung war.

Zum Betrieb benoetigt ZPUTA mindestens eine serielle Verbindung (physisch oder USB-virtuell), vorzugsweise zwei fuer Debug-Ausgabe. Auf der primaeren seriellen Verbindung ist es vorzuziehen, ein ANSI/VT100-Terminal-Emulator-Paket angeschlossen zu haben.

Verwendung von ZPUTA

Die ZPUTA-Schnittstelle wurde unter Beruecksichtigung geschrieben, dass nur ein serielles textbasiertes Terminal verfuegbar ist. Einige Komponenten wie der Editor benoetigen erweiterte Faehigkeiten, und zu diesem Zweck wurde die bewerte VT100-Emulation als geeigneter Kandidat gewaehlt. Die Interaktion erfolgt tastatur- und textbasiert (keine huebschen GUI-Schnittstellen!).

Vor ZPUTA erstellte ich ein Bootstrap-Programm namens IOCP (I/O Control Program), das auf den niedrigsten Hardwareebenen arbeitete und in der Lage war, anspruchsvollere Programme zu booten, z.B. ZPUTA. IOCP ist groessenempfindlich und wurde zum Bootstrappen von jedem Speichergeraet entworfen, und durch Einbeziehung einer SD-Karte und Petit FatFS kann es von einer SD-Karte bootstrappen.

ZPUTA wird mit seinem urspruenglichen Zweck verbleiben -- dem Testen -- waehrend zOS im Laufe der Zeit zu einem verfeinerten Betriebssystem fuer meine eigenen Projekte wird.

Kommandozeile

Die erste Begegnung mit dem Betriebssystem ist eine Anmeldemeldung, die CPU, Version usw. anzeigt und eine Eingabeaufforderung fuer Befehlseingaben ausgibt:

ZPUTA Startup Screen

Die Interaktion mit dem Betriebssystem unterscheidet sich nicht von MSDOS -- Sie geben einen Befehl ein und erhalten eine Antwort. Die ZPUTA-Befehlszeile ist kein Shell-Interpreter, sondern nur eine einfache Textschnittstelle mit vereinfachter Readline-Funktionalitaet und History.

Die Readline-Tastenzuordnungen und die vollstaendige Befehlsliste fuer Disk-IO, Disk-Buffer, Dateisystem, Speicher, Hardware, Leistungstests, Programmausfuehrung und Anwendungen sind identisch mit der englischen Version und werden dort aufgelistet.

Anwendungen

Die von ZPUTA bereitgestellten Anwendungen befinden sich auf einer SD-Karte. Die vollstaendige Befehlsreferenz finden Sie in der [englischen Version](/zputa/).

Technische Details

Dieser Abschnitt zielt darauf ab, einige der inneren Details der Anwendung zu liefern. Viele dieser Informationen sind in zOS identisch, aber da zOS reift, wird es signifikante Unterschiede geben.

Speicherorganisation

Die IOCP- und ZPUTA-Speicherkarten sind identisch mit der englischen Version und werden dort dargestellt.

Anwendungsschnittstelle

Wie die meisten Betriebssysteme stellt ZPUTA eine API bereit, die eine entsprechend kompilierte Anwendung nutzen kann, um ihre Groesse und Komplexitaet zu verringern und Funktionen innerhalb des Betriebssystems wie die serielle Verbindung wiederzuverwenden.

Anstatt einen benutzerdefinierten API-Satz zu entwerfen, war es sinnvoller, Methoden innerhalb von ZPUTA fuer die Anwendung freizugeben, z.B. printf. Dies wird durch Erstellen einer Sprungtabelle an einem festen Vektor innerhalb von ZPUTA ermoeglicht.

Die vollstaendige API-Vektortabelle und Codebeispiele sind identisch mit der englischen Version.

Automatische Einrichtung und Erstellung (empfohlen)

Der empfohlene Weg, ZPUTA zu erstellen, ist das automatische Einrichtungsskript fuer Ihre Plattform. Es prueft und installiert die Voraussetzungen, installiert die ZPU-Toolchain, klont das Repository (falls Sie sich nicht bereits in einem Checkout befinden) und bietet an, die erste Erstellung durchzufuehren — mit sinnvollen Vorgaben, die Sie durch Druecken der Eingabetaste uebernehmen koennen. Jedes Skript ist eigenstaendig: kopieren Sie einfach die einzelne Datei fuer Ihre Plattform und fuehren Sie sie aus. Die manuellen Schritte weiter unten sind fuer fortgeschrittene Benutzer, partielle Neuerstellungen und CI gedacht.
Die Erstellung wird von build.sh gesteuert, das IOCP, ZPUTA und die Apps fuer eine gewaehlte CPU in einem einzigen Durchgang assembliert/kompiliert. ZPUTA kann als einzelnes eigenstaendiges Image mit eingebetteter Funktionalitaet erstellt werden (nuetzlich, wenn keine SD-Karte vorhanden ist) oder aufgeteilt mit den Applets auf der SD-Karte. Zwei Toolchains sind beteiligt und die Einrichtungsskripte stellen beide bereit:
Toolchain Ziel-CPU Quelle
ZPU zpu-elf-gcc 3.4.2 Small Medium Flex Evo EvoMin (ZPU) installiert nach /opt/zpu (aus ZPU_TOOLCHAIN_URL)
ARM arm-none-eabi K64F (Kinetis / Teensy 3.5) im Repository unter tools/arm mitgeliefert (keine Installation)

Da beide Toolchains Linux- / Cross-Binaerdateien sind, laeuft die Erstellung nativ unter Linux, in Docker unter macOS und via WSL1 unter Windows:

Skript Plattform Hinweise
setup_zSoft.sh Linux (nativ) / macOS (Docker) Installiert die Basis-Build-Tools + die ZPU-Toolchain; unter macOS erfolgt die Erstellung im zsoft-build:latest Docker-Image.
setup_zSoft_windows.cmd Windows 10 / 11 Per Doppelklick startbarer Launcher, der das untenstehende PowerShell-Skript aufruft.
setup_zSoft_windows_native.ps1 Windows 10 / 11 (WSL1) Richtet WSL1 ein (Standard-Distribution Ubuntu-24.04) und fuehrt die Linux-Einrichtung darin aus.
setup_zSoft_wsl1.sh innerhalb WSL1 Der Linux-Einrichtungsschritt, der automatisch innerhalb der WSL1-Distribution aufgerufen wird.

Linux / macOS — setup_zSoft.sh

chmod +x setup_zSoft.sh
./setup_zSoft.sh

Windows 10 / 11 — setup_zSoft_windows_native.ps1 — Doppelklick auf setup_zSoft_windows.cmd, oder von einer PowerShell-Eingabeaufforderung:

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

Die Einrichtung klont ZSOFT_REPO_URL (Standard https://git.eaw.app/eaw/zSoft.git) nach ~/zSoft. Sobald sie fertig ist, erstellen Sie ZPUTA mit (build.sh waehlt automatisch nativ / Docker / WSL1 fuer den 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 ...)
Die Ausgaben landen unter build/ und build/SD/ — das Boot-ROM (BOOT.ROM / BOOTTINY.ROM), der IOCP_<func>_<addr>.bin-Bootloader und die ZPUTA-.bin, dazu die bin/-App-Binaerdateien, bereit zum Kopieren auf eine FAT-formatierte SD-Karte.

Nuetzliche Umgebungsvariablen-Ueberschreibungen:

Variable Zweck
ZSOFT_REPO_URL Zu klonendes Repository (Standard https://git.eaw.app/eaw/zSoft.git).
ZSOFT_DIR Erstellung innerhalb eines vorhandenen Checkouts statt Klonen.
ZPU_TOOLCHAIN_URL Speicherort des zpu-elf-gcc 3.4.2 Toolchain-Tarballs, installiert nach /opt/zpu.
ZSOFT_BUILD_IMAGE Docker-Image fuer die macOS-Erstellung (Standard zsoft-build:latest).
ZSOFT_WSL_DISTRO Name der WSL1-Distribution unter Windows (Standard Ubuntu-24.04).
ZSOFT_ASSUME_YES=1 Alle Abfragen nicht-interaktiv bestaetigen (unbeaufsichtigte / CI-Installationen).
Wenn Sie lieber von Hand erstellen oder eine CI-Pipeline skripten, ist die manuelle Erstellung — die Pfade, die Werkzeugliste, der Build-Tree und die vollstaendige build.sh-Flag-Matrix — im Abschnitt Software Build direkt darunter dokumentiert.


Software-Build

Dieser Abschnitt zeigt, wie ein einfacher ZPUTA-Kernel erstellt wird. Der Ausgangspunkt fuer den Build von ZPUTA ist das ‘build.sh’-Skript.

Pfade

Die vollstaendige Pfadtabelle und Build-Tree-Dokumentation sind identisch mit der englischen Version.

Werkzeuge

Alle Entwicklung erfolgte unter Linux, insbesondere Debian/Ubuntu. Die erforderliche Software umfasst die ZPU GCC ToolChain und optional Arduino und Teensyduino.

Build.sh

Die vollstaendige build.sh-Dokumentation mit allen Parametern und Beispielen finden Sie in der englischen Version.

Danksagungen

Danksagungen und Lizenzen sind identisch mit der englischen Version.

Lizenzen

Die FreeBSD-Lizenz

Dieses Projekt steht unter der FreeBSD-Lizenz. Details finden Sie in der englischen Version.

Die GNU Public License v3

Teile dieses Projekts stehen unter der GPLv3. Details finden Sie in der englischen Version.