Getting Started
Prerequisites
- One of the supported evaluation boards: STM32G071RBT6 (Cortex-M0+), STM32F429ZIT6 (Cortex-M4), STM32H743ZIT6 (Cortex-M7) or CH32V307VCT6 (RV32IMAC).
- A supported toolchain: Keil uVision 5 (armcc), IAR EWARM, or GCC/Clang-LLVM. Other toolchains are neither recommended nor supported at this point.
- The RME Concord microkernel (M7M1) — RVM builds on it.
Repository layout
The project generator (rvgen) locates the repositories by relative path, so keep them as siblings under one root:
<root>/
├─ M7M02_Ammonite/ the RVM hypervisor side (Monitor, Platform, Guest/)
├─ M7M01_Eukaron/ the RME microkernel RVM builds on
├─ M5P01_Prokaron/ the RMP RTOS (ships its own RVM platform layers)
├─ FreeRTOS_V900/ guest OS trees — the port sources live here
├─ uCOSII_V293/
├─ uCOSIII_V308/
├─ RTThread_V411/
├─ DjyOS_V110/
└─ KLite_V521/Vendor BSP packages live in the M0P0_Library repository.
Generate a project
All guests are driven by the RVM project generator rvgen from the Project/ directory of M7M02_Ammonite. The .rvp project file selects the chip, platform and guest type:
<Guest_Type> | Guest |
|---|---|
RMP | RMP |
FRT | FreeRTOS |
UO2 | uC/OS-II |
UO3 | uC/OS-III |
RTT | RT-Thread |
DJY | DjyOS (commemorative) |
KLT | KLite (commemorative) |
Two entry scripts exist:
benchmark.sh— generates the standard benchmark image (the one behind the benchmark tables).generate.sh— runs the same generator without the benchmark option; the guest boots the plain application in<guest>_main.c, which is copied into the workspace asmain.c(with the idle-parking hook). Both scripts must be given the same source roots.
The generator emits the build system (GCC Makefile / Keil / IAR project) with the correct include order, copying all needed port files into the generated workspace.
Windows users
Copy the binary-to-C converter (bincopy.exe) next to your compiler — for Keil uVision 5:
Keil\ARM\ARMCC\bin\bincopy.exeFor Eclipse-GCC, copy it into the GCC installation folder.
Build and run
- Open the generated project with your toolchain (or run
makefor the GCC Makefile flavor) and build it. - Flash the image to the board. The examples use only the serial port, which is already configured for you.
- Start step-by-step debugging, or let it run and watch the serial console — the benchmark prints its results there (e.g.
PASS: 0 faults, 9 items).
Integrating a guest manually
The Guest/ library contains only the added files — it never overwrites official kernel sources, so a plain overlay is safe:
- Copy the guest's directory (e.g.
FreeRTOS_V900/) over the root of your official tree of the same version (merge directories). - The RVM port directories land beside the official ones, exactly like additional official ports (e.g.
portable/GCC/ARM_A7M_RVM/). - Configure the port switches if the guest has any (see Guest Support).
Never edit the mirror
M7M02_Ammonite/Guest/ is a mirror produced by update-maintainer-only.sh. Edit the source trees (e.g. RTThread_V411/), then re-run the script from the Guest/ directory.
Going further
- The full user manual (PDF) covers every configuration option in depth. For production deployments, prefer the default configuration files — the kernel has too many details to configure safely by hand.
- The hypercall reference lists all privileged operations a guest can request.
- Port contracts and implementation strategies per guest: GUEST.md.
