Skip to content

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
RMPRMP
FRTFreeRTOS
UO2uC/OS-II
UO3uC/OS-III
RTTRT-Thread
DJYDjyOS (commemorative)
KLTKLite (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 as main.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.exe

For Eclipse-GCC, copy it into the GCC installation folder.

Build and run ​

  1. Open the generated project with your toolchain (or run make for the GCC Makefile flavor) and build it.
  2. Flash the image to the board. The examples use only the serial port, which is already configured for you.
  3. 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:

  1. Copy the guest's directory (e.g. FreeRTOS_V900/) over the root of your official tree of the same version (merge directories).
  2. The RVM port directories land beside the official ones, exactly like additional official ports (e.g. portable/GCC/ARM_A7M_RVM/).
  3. 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.

An official work of EDI, released into the public domain.