eVisor is a light-weight Bare Metal Hypervisor (Type 1) written in C++. This project is intended for use in embedded systems (ARM64 devices) and for educational purposes.
eVisor demo video @ Youtube - NuttX runs on Raspberry Pi4

Please feel free to read ゼロからのハイパーバイザ自作入門 as well if you're interested. It’s a Japanese book about creating your own hypervisor.
It is recommended to use Ubuntu 22.04 with Clang 14. Currently, this software may not be buildable on Ubuntu 24 or higher.
sudo apt install cmake clang llvmThis software does not use C++ standart libraries (libstdc++), but if you hit a following cmake build error, try to install libstdc++-12-dev.
/usr/bin/ld: cannot find -lstdc++: No such file or directorymkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/cross-toolchain-clang-aarch64.cmake
-DCMAKE_BUILD_TYPE={Debug|Release}
-DBOARD={raspi4|qemu}
-DTEST_GUEST={serial|test_app|nuttx|linux}mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE={Debug|Release}
-DBOARD={raspi4|qemu}
-DTEST_GUEST={serial|test_app|nuttx|linux}mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/cross-toolchain-clang-aarch64.cmake
-DCMAKE_BUILD_TYPE=Release -DBOARD=raspi4 -DTEST_GUEST=nuttx
cmake --build .Setup SD card for Rasberry Pi4 (See config/raspi4/config.txt for the detail settings):
cp config/raspi4/config.txt <path_to_sdcard>/bootCopy NuttX image file to the SD card:
cp examples/nuttx/nuttx.bin <path_to_sdcard>/bootCopy eVisor image file to the SD card:
cp build/kernel.bin <path_to_sdcard>/boot/kernel.binThe serial console and output logs are assigned to UART0 (GPIO 14, GPIO 15), with a baud rate of 115200bps.
sudo minicom -D /dev/ttyUSB0
sudo apt install qemu-system-arm Note that QEMU 9.0 or higher is necessary to run this software. Please see Download QEMU.
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/cross-toolchain-clang-aarch64.cmake
-DCMAKE_BUILD_TYPE=Release -DBOARD=qemu -DTEST_GUEST=nuttx
cmake --build .qemu-system-aarch64
-machine virt,virtualization=on,gic-version=2
-cpu cortex-a72 -smp 4
-m 4G
-nographic -net none
-chardev stdio,id=con,mux=on -serial chardev:con -mon chardev=con,mode=readline
-kernel ./kernel.elf
-drive file=../examples/nuttx/nuttx.bin,format=raw,id=drive0,if=none
-device virtio-blk-device,drive=drive0,bus=virtio-mmio-bus.0qemu-system-aarch64
-machine virt,virtualization=on,gic-version=2
-cpu cortex-a72 -smp 4
-m 4G
-nographic -net none
-chardev stdio,id=con,mux=on -serial chardev:con -mon chardev=con,mode=readline
-kernel ./kernel.elf
-drive file=../examples/nuttx/nuttx.bin,format=raw,id=drive0,if=none
-device virtio-blk-device,drive=drive0,bus=virtio-mmio-bus.0
-d mmu,in_asm,guest_errors,int,exec,page -D qemu_trace.logSpecial thanks the followings since I particularly referred to them in the early stage of development.