88 lines
3.3 KiB
ReStructuredText
88 lines
3.3 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
======================
|
|
GenieZone Introduction
|
|
======================
|
|
|
|
Overview
|
|
========
|
|
GenieZone hypervisor (gzvm) is a type-I hypervisor that supports various virtual
|
|
machine types and provides security features such as TEE-like scenarios and
|
|
secure boot. It can create guest VMs for security use cases and has
|
|
virtualization capabilities for both platform and interrupt. Although the
|
|
hypervisor can be booted independently, it requires the assistance of GenieZone
|
|
hypervisor kernel driver (also named gzvm) to leverage the ability of Linux
|
|
kernel for vCPU scheduling, memory management, inter-VM communication and virtio
|
|
backend support.
|
|
|
|
Supported Architecture
|
|
======================
|
|
GenieZone now only supports MediaTek ARM64 SoC.
|
|
|
|
Features
|
|
========
|
|
|
|
- vCPU Management
|
|
|
|
VM manager aims to provide vCPUs on the basis of time sharing on physical
|
|
CPUs. It requires Linux kernel in host VM for vCPU scheduling and VM power
|
|
management.
|
|
|
|
- Memory Management
|
|
|
|
Direct use of physical memory from VMs is forbidden and designed to be
|
|
dictated to the privilege models managed by GenieZone hypervisor for security
|
|
reason. With the help of the gzvm module, the hypervisor is able to manipulate
|
|
memory as objects.
|
|
|
|
- Virtual Platform
|
|
|
|
The gzvm hypervisor emulates a virtual mobile platform for guest OS running on
|
|
guest VM. The platform supports various architecture-defined devices, such as
|
|
virtual arch timer, GIC, MMIO, PSCI, and exception watching...etc.
|
|
|
|
- Inter-VM Communication
|
|
|
|
Communication among guest VMs is provided mainly on RPC. More communication
|
|
mechanisms will be provided in the future based on VirtIO-vsock.
|
|
|
|
- Device Virtualization
|
|
|
|
The solution is provided using the well-known VirtIO. The gzvm module redirects
|
|
MMIO traps back to VMM where the virtual devices are mostly emulated.
|
|
Ioeventfd is implemented using eventfd for signaling host VM that some IO
|
|
events in guest VMs need to be processed.
|
|
|
|
- Interrupt virtualization
|
|
|
|
All interrupts during some guest VMs running are handled by GenieZone
|
|
hypervisor with the help of gzvm module, both virtual and physical ones.
|
|
In case there's no guest VM running, physical interrupts are handled by host
|
|
VM directly for performance reason. Irqfd is also implemented using eventfd
|
|
for accepting vIRQ requests in gzvm module.
|
|
|
|
Platform architecture component
|
|
===============================
|
|
|
|
- vm
|
|
|
|
The vm component is responsible for setting up the capability and memory
|
|
management for the protected VMs. The capability is mainly about the lifecycle
|
|
control and boot context initialization. And the memory management is highly
|
|
integrated with ARM 2-stage translation tables to convert VA to IPA to PA
|
|
under proper security measures required by protected VMs.
|
|
|
|
- vcpu
|
|
|
|
The vcpu component is the core of virtualizing an aarch64 physical CPU, and it
|
|
controls the vCPU lifecycle including creating, running and destroying.
|
|
With self-defined exit handler, the vm component is able to act accordingly
|
|
before termination.
|
|
|
|
- vgic
|
|
|
|
The vgic component exposes control interfaces to Linux kernel via irqchip, and
|
|
we intend to support all SPI, PPI, and SGI. When it comes to virtual
|
|
interrupts, the GenieZone hypervisor writes to list registers and triggers
|
|
vIRQ injection in guest VMs via GIC.
|