- uvm32 ist eine minimale Virtual-Machine-Sandbox für ressourcenbeschränkte Umgebungen wie Mikrocontroller, besteht aus einer einzigen C-Datei und arbeitet ohne dynamische Speicherallokation
- Auf Basis eines RISC-V-Emulators führt sie Bytecode-Apps aus, die in C, Zig, Rust oder Assembler geschrieben wurden, und verhindert durch ihr asynchrones Design ein Blockieren des Hosts
- Der Betrieb ist mit unter 3 KB Flash und unter 1 KB RAM möglich; Sicherheit hat Priorität, sodass fehlerhafter Code den Host nicht zum Absturz bringt
- Es werden verschiedene VM-Host-Beispiele und sprachspezifische Beispiel-Apps bereitgestellt, wodurch eine Integration in Umgebungen wie Embedded, Spiele oder Plugins möglich ist
- Veröffentlicht unter der MIT-Lizenz, frei nutzbar für Forschung, Produkte und Embedded-Geräte
Überblick über uvm32
- uvm32 ist eine abhängigskeitsfreie leichtgewichtige Virtual-Machine-Sandbox, die für Mikrocontroller und Geräte mit begrenzten Ressourcen entwickelt wurde
- Aufbau aus einer einzelnen C-Datei, auf dem C99-Standard basierend, asynchrones Design, keine dynamische Speicherallokation
- Läuft auf einem STM32L0 (ARM Cortex-M0+) mit weniger als 3 KB Flash / 1 KB RAM
- Sie basiert auf einem RISC-V-Emulator und enthält eine Verwaltungsoberfläche sowie effiziente Tools zum Erstellen von Code
Wichtige Einsatzbereiche
- Ersatz für eingebettete Skript-Engines wie Lua, Duktape, MicroPython
- Isolierung von nicht vertrauenswürdigem Code durch eine Sandbox-Umgebung
- Unterstützung der Entwicklung mit modernen Systemsprachen wie Rust und Zig
- Minimierter Wartungsaufwand für mehrere Plattformen nach dem Prinzip „Write once, run anywhere“
Zentrale Merkmale
- Enthält Bytecode-Beispiele, geschrieben in C, Zig, Rust und Assembler
- Non-Blocking-Design, damit fehlerhafter Code den Host nicht anhält
- Keine Annahmen über Host-I/O, einfaches und konsistentes Ausführungsmodell
- Bietet eine sichere minimale FFI
- Kann von kleinen Skripten bis zu komplexen Anwendungen alles ausführen
- Sicherheitsorientiertes Design, bei dem Fehler innerhalb der VM den Host nicht beschädigen
- Basiert auf einem vollständigen CPU-Emulator, ist jedoch nicht für Hardware-Simulation gedacht
Vergleich mit Alternativen
- Kleinerer Speicher-Footprint als bestehende Embedded-Skript-Engines
- Unterstützung verbreiteter Sprachen wie C, Rust und Zig
- Einfache Integration in bestehende Software
- Unterstützung verschiedener Paradigmen wie ereignisbasiert, Polling und Multiprozessor
- Hohe Robustheit gegenüber fehlerhaftem VM-Code
- Dagegen sind direkte FFI-Aufrufe, maximale Effizienz, eine einfache Skripting-Erfahrung und eine eingebaute Standardbibliothek nicht das Ziel
Build und Ausführung (Docker)
- Kann allein mit einem C-Compiler gebaut werden, Docker-Umgebung wird bereitgestellt
- Umgebung einrichten mit den Befehlen
make dockerbuild und make dockershell
- Nach Ausführung von
make innerhalb der Docker-Shell kann
./hosts/host/host apps/helloworld/helloworld.bin ausgeführt werden
- Mit dem Befehl
host -h lassen sich alle Optionen anzeigen
Lizenz
- Unter der MIT License veröffentlicht
- Frei verwendbar in Forschung, Produkten und Embedded-Geräten
Noch keine Kommentare.