wkoszek/emuko: Fast RISC-V emulator written in Rust. Boots Linux.

🔥 Explore this awesome post from Hacker News 📖

📂 **Category**:

💡 **What You’ll Learn**:

Fast RISC-V emulator written in Rust. Boots Linux.

emuko.dev

  • RV64IMAFDC with M/S/U privilege levels and Sv39 virtual memory
  • JIT compilation for ARM64 and x86_64 hosts (adaptive selection)
  • Full Linux boot with BusyBox userland and interactive shell
  • Snapshot/restore for saving and resuming full machine state
  • Daemon mode with HTTP API and live UART command injection
  • Differential checker to validate JIT against interpreter
  • Peripherals: UART 16550, CLINT, PLIC, SBI 1.0, FDT generation
  • Single dependency (zstd), pure Rust

RISC-V Emulator Comparison (emuko vs others)

This is a direct comparison with commonly used RISC-V emulators/simulators: QEMU, Spike, and Renode.

Legend: = built in / directly documented, = not built in (or not documented in the referenced source).

Feature emuko QEMU (RISC-V virt) Spike (riscv-isa-sim) Renode
JIT / dynamic translation backend
Snapshot save + restore
Autosnapshot (periodic)
HTTP API for machine control
WebSocket UART console endpoint
Scriptable UART host bridge primitives
One-command Debian kernel/initrd download with SHA256 verification
Built-in JIT-vs-interpreter differential checker
GDB debugging workflow
Large RISC-V board/device ecosystem (PCIe/virtio on virt)
Multi-node simulation focus
Broad ISA extension coverage (incl. RVV, crypto, etc.)

Sources:

The main binary is target/release/emuko.

alias emuko=target/release/emuko
emuko dow

Downloads the Debian RISC-V netboot kernel and initrd to ~/.emuko/ with SHA256 verification.

This starts the emulator daemon and attaches an interactive console. You’ll see the kernel boot and get a shell prompt. Keyboard shortcuts:

Key Action
Ctrl+] Detach from console (daemon keeps running)
Ctrl+C Sent to guest (interrupt running command)
Ctrl+D Sent to guest (EOF)

emuko start            # reattach console to running daemon
emuko dump             # print CPU state
emuko stop             # pause execution
emuko con              # continue execution
emuko step 1000        # step N instructions
emuko snap             # take a snapshot
emuko kill             # shut down daemon

The daemon exposes an HTTP API at http://127.0.0.1:7788/v1/api/ and a WebSocket console at ws://127.0.0.1:7788/v1/ws/uart.

emuko snap                 # take a snapshot now
emuko snap 5000000         # auto-snapshot every 5M steps
emuko snap stop            # disable auto-snapshots
emuko ls                   # list snapshots
emuko restore    # restore a snapshot

Pass options after emuko start, or set via environment variables or emuko.yml:

Option Env Var Default Description
--ram-size RAM_SIZE 1 GB RAM in bytes
--backend EMUKO_BACKEND adaptive adaptive, arm64_jit, amd64_jit, arm64, x86_64
--bootargs BOOTARGS serial console Kernel command line

Use emuko dow (see Quick Start above) or grab pre-built images from DQIB (Debian Quick Image Baker). To download a specific set:

Apache 2.0. See LICENSE.

💬 **What’s your take?**
Share your thoughts in the comments below!

#️⃣ **#wkoszekemuko #Fast #RISCV #emulator #written #Rust #Boots #Linux**

🕒 **Posted on**: 1772234646

🌟 **Want more?** Click here for more info! 🌟

By

Leave a Reply

Your email address will not be published. Required fields are marked *