Releases: LekKit/RVVM
RVVM v0.6
This release includes
- Prebuilt
rvvm-cli
&librvvm
v0.6 for Linux, Windows, MacOS x86_64 - More builds will be added later or should build from source
- Prebuilt riscv64 U-Boot 2024.1
fw_payload.bin
EFI firmware; With NVMe & EFIFB support patches, has framebuffer console - Prebuilt riscv64 Arch RISC-V image with networking,
nano
,sshd
. Credentials areroot
:riscv
. Built with archriscv-scriptlet, with mkinitcpio config for faster boot, no firmware - Prebuilt riscv64 Debian image, see dqib. Notice they don't have framebuffer & I2C-HID enabled in the kernel. Credentials:
root
:riscv
- Prebuilt riscv64 OpenSBI 1.4
fw_jump.bin
for use as an SBI bootrom with a custom kernel payload. Generic upstream OpenSBI works too. - Prebuilt riscv64 static Linux 6.8.1 kernel Image
linux_6.8
for tinkering - See LekKit/patches-misc for firmware/kernel configs, patches and more
HOWTO
-
To boot a generic distro/EFI image, use
rvvm fw_payload.bin -m 2G -i archriscv.img
. Be aware some images may be slow to boot, and usually need more than default 256M of RAM. -
Arch RISC-V image is included with full support. Debian lacks framebuffer/i2c-hid drivers in their kernel, but is otherwise functional over uart/ssh.
-
Generic Ubuntu 23.10 image works, but is overall bloated: https://cdimage.ubuntu.com/releases/23.10/release/ubuntu-23.10-preinstalled-server-riscv64.img.xz. Press Enter over the UART (your terminal) at GRUB screen. Credentials:
ubuntu
:ubuntu
. Xorg lags heavily because of a bug in an older version, disable HW accel in xorg config. -
FreeBSD 13.3 works: https://download.freebsd.org/snapshots/VM-IMAGES/13.3-STABLE/riscv64/Latest/FreeBSD-13.3-STABLE-riscv-riscv64.raw.xz. Credentials:
root
:root
, use# kldload if_re
to load networking driver. -
To boot a rootfs inside an image with a static kernel payload, use
rvvm fw_jump.bin -k linux_6.8 -i rootfs.img
. This is useful for distros without an official bootable image, like Buildroot, and is usually faster. If your image doesn't directly contain a root filesystem, you can pass-append root=/dev/nvme0n1p1
or the likes to the RVVM, and this cmdline will reach the guest kernel
New features
- Networking is now stable and enabled by default
- Allow port forwarding to the guest with
-portfwd 127.0.0.1:8080=80
- Support relative mouse movement, grabbing the host mouse
- Support international keyboard layouts (I.e. keys specific to Japanese, Korean, German etc keyboards)
- Optional SDL2 GUI backend
- Support Big-endian hosts (MIPS64, PowerPC64) properly
- SiFive GPIO support
- MTD physmap firmware chip
- Dallas DS1742 Real-time clock
- Support (multiple) PTY or UNIX sockets as UART character device with
-serial [file]
, silent UART with-serial null
; - Support explicitly choosing NVMe or ATA with
-ata [img]
or-nvme [img]
- Support using host block devices (/dev/sda, /dev/mmcblk) as RVVM drives
- Faster threaded IO implementation
- Faster UART console (Especially on Windows, Serenity)
- Optimized Win32 display rendering
- Slightly better RVJIT x86 register allocation
- RVJIT significantly optimizes memory accesses with userland CPU emulation (To the point of near-native perf of user emulation)
- Rework CMake build system to build shared
librvvm
properly - Colorful logger
- Libretro port
- [WIP] Began work on a Linux userspace binary emulator. Many riscv64 glibc binaries work, but threading and JIT caches are flaky.
RVVM API Improvements:
- Character device API
- GPIO API
- Provide a separate
mapping
property for direct MMIO regions - Omit PC increment for traps in Userland API
- Support non-canonical framebuffer stride
- Return rvvm_mmio_handle_t upon attaching most de-attachable MMIO devices
- Implement RVVM_OPT_MEM_BASE, RVVM_OPT_MEM_SIZE to query RAM configuration of the machine.
- Implement RVVM_OPT_HART_COUNT to query amount of cores
- Java JNI bindings
Fixes, compatibility
- Fix crashes when explicitly unloading librvvm shared library (#97)
- Fix NVMe deadlock reporting when host IO is slow (#99)
- More bullerproof RVJIT cache allocation (#98)
- Implement RT8169 93C56 EEPROM to fix FreeBSD & Haiku OS networking (#118)
- Fix rare keypress loss (#126)
- Fix pending PLIC interrupts not being re-delivered upon writes to prio/enable/threshold
- Fix 0-byte UDP payloads with tap_user backend
- Fix TCP connection tuple lookup
- Improve TCP stability immensely with tap_user backend
- Fix networking on NetBSD
- Implement proper FMA emulation without dual rounding in FPU, advertise FENV_ACCESS
- Fix endianness issues in FPU
- Fix several VMA operations on Win32 hosts
- Support both UTF8 and system locale paths on Win32 hosts
- Use pthread_cond_timedwait_relative_np() on MacOS to fix possible hang upon wall clock change
- Fix MMIO op size validation
- Fix PCI attach failure handling with all the devices
- Fix non-working I2C ocores with FreeBSD guest
- Advertise zicsr, zifencei extensions in CPU DT
- Fix KSM & THP erroneously not being enabled
- Use .dylib extension for MacOS shared lib target
- Fix OpenBSD CMake build due to type naming collisions
- Fix CMake build on arches without a JIT backend
- Fix Serenity build warnings due to macro naming collisions
- Myriad of small fixes
New Contributors
- @mishrasamiksha made their first contribution in #111
- @singodiyashubham87 made their first contribution in #116
- @fish4terrisa-MSDSM made their first contribution in #120
- @OscarL made their first contribution in #129
Full Changelog: v0.5...v0.6
RVVM v0.5
This release includes
- Prebuilt
rvvm-cli
v0.5 for Linux x86_64/ARM64, Windows x86_64, MacOS x86_64 - More builds will be added later or should build from source
- Prebuilt OpenSBI 1.2
fw_jump.bin
for use in the guest - Prebuilt U-Boot 2023.4
u-boot.bin
kernel,fw_payload.bin
firmware; With NVMe & EFIFB support patches - See LekKit/patches-misc for firmware/kernel configs and more
Major features
- RVJIT Von Neumann instruction cache (ifence stalls elimination)
- RVJIT Linker (Direct linkage of translated functions, improves perf)
- NVMe storage devices, TRIM on raw sparse images
- OpenCores I2C, I2C-HID input devices, cursor integration
- Realtek RTL8169 NIC, WIP userspace networking (Build with USE_NET=1)
- ELF Firmware/Kernel loading
RVVM API Improvements:
- Automatic IRQ/Bus/MMIO assignment
- Machine options (CPU limits, etc)
- Framebuffer, HID, Reboot/poweroff APIs
Fixes, compatibility
- MMIO/PCIe Atomics
- ACLINT MSWI, working SMP in U-Boot
- PLIC fixes concerning FreeBSD/OpenBSD guests stability
- Support HaikuOS guests
- WFI fixes for full riscv-tests conformance
- Support UART VT on Windows 10
- Support HaikuOS, SerenityOS hosts
- Support Emscripten
- Support Windows CE
- Better thread/timer implementations on Windows
- Improve idle CPU usage and sleep precision
- Fix vulnerabilities & lockups exposed by LLVM Fuzzer
- Fix issues uncovered by ASAN/UBSAN/TSAN
- Fix MacOS IO issues (#81)
- Fix rare stuttering due to hashmap scaling logic
- Fix rare threadpool lockups
- Myriad of tiny fixes...
New Contributors
- @mjunix made their first contribution in #62
- @X547 made their first contribution in #64
- @kvxmmu made their first contribution in #72
- @iyzsong made their first contribution in #88
Full Changelog: v0.4...v0.5