Run a Linux guest inside an ARM hypervisor on your own machine using QEMU to study how guest isolation and privilege separation work.
Experiment with intercepting and emulating ARM hardware access from a guest operating system at the EL2 level.
Use as a learning reference or starting point for building your own ARM EL2 hypervisor from scratch.
Requires an ARM 64-bit cross-compiler toolchain and QEMU with ARM support, no pre-built binaries are provided.
Ariel is a hypervisor built for ARM 64-bit processors, specifically for use inside QEMU, which is a program that emulates computer hardware on your own machine. A hypervisor is a layer of software that sits underneath an operating system and controls what that guest operating system is allowed to do. This project targets the ARM privilege level called EL2, which is the level reserved for hypervisor code in ARM's security model, sitting above where normal operating systems run. The hypervisor can do two things: run its own small built-in test program, or load and manage a real Linux system image. When it loads Linux, it sets up a private memory region for the guest, maps that region carefully so Linux believes it owns the addresses it expects, and intercepts any attempts by Linux to touch hardware directly. Devices like the serial port and interrupt controller are not passed straight through to the guest by default, instead the hypervisor handles those accesses through its own policy tables and emulation code. When the guest operating system performs a privileged operation or tries to call into the hypervisor directly, the CPU transfers control to the EL2 exception vector. Ariel saves all the relevant registers and state into a structure, decides what to do, and either emulates the operation or denies it. Guest code can also make explicit requests to the hypervisor using a special instruction called HVC, which supports a small set of operations: querying the hypervisor identity, writing to a console, pausing execution, and reporting status. Building and running the project requires a compatible ARM cross-compiler and QEMU. The Makefile handles compilation and can launch QEMU directly. There is also a smoke test target that downloads test artifacts and runs a quick check on the Linux boot path. A Python script can parse the serial port log output into a readable summary.
← gonefunctorz on gitmyhub — every repo by this author, as a profile.
Verify against the repo before relying on details.