Warning
This documentation is actively being updated as the project evolves and may not be complete in all areas.
Renode driver¶
jumpstarter-driver-renode provides a Jumpstarter driver for the
Renode embedded systems emulation framework. It
enables microcontroller-class virtual targets (Cortex-M, RISC-V MCUs)
running bare-metal firmware or RTOS as Jumpstarter test targets.
Installation¶
$ pip3 install --extra-index-url https://pkg.jumpstarter.dev/simple jumpstarter-driver-renode
Renode must be installed separately and available in PATH. See
Renode installation.
Architecture¶
The driver follows the composite driver pattern:
Renode– root composite driver, manages the simulation lifecycleRenodePower– starts/stops the Renode process and controls the simulation via the telnet monitor interfaceRenodeFlasher– loads firmware (ELF/BIN/HEX) into the simulated MCUconsole– UART output via PTY terminal, reusing thePySerialdriver
Configuration¶
Users define Renode targets entirely through YAML configuration. No code changes are needed for new targets.
Configuration Parameters¶
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
|
(required) |
Path to |
|
|
|
Peripheral path for the console UART |
|
|
|
Name of the Renode machine instance |
|
|
|
TCP port for the Renode monitor (0 = auto-assign) |
|
|
|
Additional monitor commands run after platform load |
Examples¶
STM32F407 Discovery (opensomeip FreeRTOS/ThreadX)¶
export:
ecu:
type: jumpstarter_driver_renode.driver.Renode
config:
platform: "platforms/boards/stm32f4_discovery-kit.repl"
uart: "sysbus.usart2"
NXP S32K388 (opensomeip Zephyr)¶
export:
ecu:
type: jumpstarter_driver_renode.driver.Renode
config:
platform: "/path/to/s32k388_renode.repl"
uart: "sysbus.uart0"
extra_commands:
- "sysbus WriteDoubleWord 0x40090030 0x0301"
Nucleo H753ZI (openbsw-zephyr)¶
export:
ecu:
type: jumpstarter_driver_renode.driver.Renode
config:
platform: "platforms/cpus/stm32h743.repl"
uart: "sysbus.usart3"
Usage¶
Programmatic (pytest)¶
from jumpstarter_driver_renode.driver import Renode
from jumpstarter.common.utils import serve
with serve(
Renode(
platform="platforms/boards/stm32f4_discovery-kit.repl",
uart="sysbus.usart2",
)
) as renode:
renode.flasher.flash("/path/to/firmware.elf")
renode.power.on()
with renode.console.pexpect() as p:
p.expect("Hello from MCU", timeout=30)
renode.power.off()
Monitor Commands¶
Send arbitrary Renode monitor commands via the client:
response = renode.monitor_cmd("sysbus GetRegistrationPoints sysbus.usart2")
The monitor CLI subcommand is also available inside a jmp shell session.
Design Decisions¶
Key decisions:
Control interface: Telnet monitor via
anyio.connect_tcp(no pyrenode3 / .NET dependency)UART exposure: PTY terminal reusing
PySerial(consistent with QEMU)Configuration model: Managed mode with
extra_commandsfor target-specific customizationFirmware loading:
flash()stores path,on()loads into simulation