pw_emu#

Flexible emulators frontend

Experimental Python CLI

  • Declarative. Define emulation targets in JSON. A target encapsulates the emulated machine, tools, and host channels configuration.

  • Flexible. Manage multiple emulator instances over a CLI or Python API.

  • Unopinionated. Use QEMU or Renode, or extend pw_emu to support your favorite emulator.

  • Configurable. Expose channels for debugging and monitoring through configurable host resources like sockets.

Declaratively configure an emulation target like this:

{
  "targets": {
    "qemu-lm3s6965evb": {
      "gdb": [
        "arm-none-eabi-gdb"
      ],
      "qemu": {
        "executable": "qemu-system-arm",
        "machine": "lm3s6965evb",
        "channels": {
          "chardevs": {
            "serial0": {
              "id": "serial0"
            }
          }
        }
      }
    }
  }
}

Then run a binary like this!

pw emu run --args=-no-reboot qemu-lm3s6965evb \
    out/lm3s6965evb_qemu_gcc_size_optimized/obj/pw_snapshot/test/cpp_compile_test
Get started & guides

How to set up and use pw_emu

CLI reference

Reference details about the pw_emu command line interface

API reference

Reference details about the pw_emu Python API

Configuration

Reference details about pw_emu declarative configuration

Design

Design details about pw_emu

SEED-0108: Emulators Frontend

The RFC explaining the initial design and motivations for pw_emu

Source code

Source code for pw_emu