audk/OvmfPkg/CloudHv
Nicolas Ojeda Leon a1bd79c514 Ovmf/HardwareInfoLib: Add Dxe lib to dynamically parse heterogenous data
Following the Hardware Info library, create the DxeHardwareInfoLib
which implements the whole API capable of parsing heterogeneous hardware
information. The list-like API grants callers a flexible and common
pattern to retrieve the data. Moreover, the initial source is a BLOB
which generalizes the host-to-guest transmission mechanism.

The Hardware Info library main objective is to provide a way to
describe non-discoverable hardware so that the host can share the
available resources with the guest in Ovmf platforms. This change
features and embraces the main idea behind the library by providing
an API that parses a BLOB into a linked list to retrieve hardware
data from any source. Additionally, list-like APIs are provided so
that the hardware info list can be traversed conveniently.
Similarly, the capability is provided to filter results by specific
hardware types. However, heterogeneous elements can be added to the
list, increasing the flexibility. This way, a single source, for
example a fw-cfg file, can be used to describe several instances of
multiple types of hardware.

This part of the Hardware Info library makes use of dynamic memory
and is intended for stages in which memory services are available.
A motivation example is the PciHostBridgeLib. This library, part
of the PCI driver populates the list of PCI root bridges during DXE
stage for future steps to discover the resources under them. The
hardware info library can be used to obtain the detailed description
of available host bridges, for instance in the form of a fw-cfg file,
and parse that information into a dynmaic list that allows, first to
verify consistency of the data, and second discover the resources
availabe for each root bridge.

Cc: Alexander Graf <graf@amazon.de>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Nicolas Ojeda Leon <ncoleon@amazon.com>
2022-06-22 15:34:16 +00:00
..
CloudHvDefines.fdf.inc OvmfPkg: CloudHv: Fix FW_BASE_ADDRESS 2022-06-03 10:51:26 +00:00
CloudHvElfHeader.fdf.inc OvmfPkg: Generate CloudHv as a PVH ELF binary 2022-03-04 02:41:57 +00:00
CloudHvX64.dsc Ovmf/HardwareInfoLib: Add Dxe lib to dynamically parse heterogenous data 2022-06-22 15:34:16 +00:00
CloudHvX64.fdf OvmfPkg: CloudHv: Fix FW_BASE_ADDRESS 2022-06-03 10:51:26 +00:00
README OvmfPkg: CloudHv: Add README 2022-03-04 02:41:57 +00:00

README

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.


CloudHv is a port of OVMF for the Cloud Hypervisor project.

The Cloud Hypervisor project
----------------------------

Cloud Hypervisor is a Virtual Machine Monitor that runs on top of KVM. The
project focuses on exclusively running modern, cloud workloads, on top of a
limited set of hardware architectures and platforms. Cloud workloads refers to
those that are usually run by customers inside a cloud provider. This means
modern operating systems with most I/O handled by paravirtualised devices
(i.e. virtio), no requirement for legacy devices, and 64-bit CPUs.

https://github.com/cloud-hypervisor/cloud-hypervisor

Design
------

Based on Cloud Hypervisor's motto to reduce the emulation as much as possible,
the project logically decided to support the PVH boot specification as the only
way of booting virtual machines. That includes both direct kernel boot and OVMF
firmware which must be generated as PVH ELF binaries.
PVH allows information like location of ACPI tables and location of guest RAM
ranges to be shared without the need of an extra emulated device like a CMOS.

Features
--------

* Serial console
* EFI shell
* virtio-pci

Build
-----

The way to build the CloudHv target is as follows:

OvmfPkg/build.sh -p OvmfPkg/CloudHv/CloudHvX64.dsc -a X64 -b DEBUG

Usage
-----

Assuming Cloud Hypervisor is already built, one can start a virtual machine as
follows:

./cloud-hypervisor \
    --cpus boot=1 \
    --memory size=1G \
    --kernel Build/CloudHvX64/DEBUG_GCC5/FV/CLOUDHV.fd \
    --disk path=/path/to/disk.raw

Releases
--------

In edk2-stable202202, CloudHv is generated as data-only binary.
Starting with edk2-stable202205, CloudHv is generated as a PVH ELF binary to
reduce the amount of emulation needed from Cloud Hypervisor.
For TDX, things are handled differently and PVH is not used, which is why the
firmware is always generated as a data-only binary.

+-------------------+----------------+
|                   |    CloudHv     |
+-------------------+----------------+
| edk2-stable202202 | Data binary    |
+-------------------+----------------+
| edk2-stable202205 | PVH ELF binary |
+-------------------+----------------+