xvisor: Initial commit of Xvisor Hypervisor

This commit adds support for building the baremetal Xvisor Hypervisor.

I have only tested this with RISC-V so currently only RISC-V is marked
as a COMPATIBLE_HOST, although Xvisor does support multiple other
architectures.

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
This commit is contained in:
Alistair Francis 2020-02-03 13:50:11 -08:00 committed by Bruce Ashfield
parent 3a7d446fa9
commit eb80f0c0ba
3 changed files with 103 additions and 0 deletions

View File

@ -0,0 +1,34 @@
From 022c885d077dce6fad3eca5fd2f54b2070c375d2 Mon Sep 17 00:00:00 2001
From: Alistair Francis <alistair.francis@wdc.com>
Date: Fri, 17 May 2019 14:21:44 -0700
Subject: [PATCH] TESTS: Don't specify mabi or march for RISC-V
To avoid
can't link double-float modules with soft-float modules
errors when building 32-bit baremetal guests don't specify mabi
or march.
Upstream-Status: Inappropriate [Fixes a 32-bit Yocto flow bug]
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
tests/riscv/common/basic/Makefile.inc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/riscv/common/basic/Makefile.inc b/tests/riscv/common/basic/Makefile.inc
index 9fa5abed..f3ff1864 100644
--- a/tests/riscv/common/basic/Makefile.inc
+++ b/tests/riscv/common/basic/Makefile.inc
@@ -24,8 +24,8 @@
ARCH_CPPFLAGS=$(board_cppflags) -DFIRMWARE_BOOT
ARCH_CPPFLAGS+=-DTEXT_START=$(board_text_start)
ifeq ($(board_32bit),y)
-ARCH_CFLAGS=$(board_cflags) -fno-omit-frame-pointer -fno-optimize-sibling-calls -mno-save-restore -mstrict-align -mabi=ilp32 -march=rv32imafdc -mcmodel=medany
-ARCH_ASFLAGS=$(board_asflags) -fno-omit-frame-pointer -fno-optimize-sibling-calls -mno-save-restore -mstrict-align -mabi=ilp32 -march=rv32imafdc -mcmodel=medany
+ARCH_CFLAGS=$(board_cflags) -fno-omit-frame-pointer -fno-optimize-sibling-calls -mno-save-restore -mstrict-align -mcmodel=medany
+ARCH_ASFLAGS=$(board_asflags) -fno-omit-frame-pointer -fno-optimize-sibling-calls -mno-save-restore -mstrict-align -mcmodel=medany
else
ARCH_CFLAGS=$(board_cflags) -fno-omit-frame-pointer -fno-optimize-sibling-calls -mno-save-restore -mstrict-align -mabi=lp64 -march=rv64imafdc -mcmodel=medany
ARCH_ASFLAGS=$(board_asflags) -fno-omit-frame-pointer -fno-optimize-sibling-calls -mno-save-restore -mstrict-align -mabi=lp64 -march=rv64imafdc -mcmodel=medany
--
2.21.0

View File

@ -0,0 +1,25 @@
def get_oemake_config(d):
plat = d.getVar('XVISOR_PLAT')
if plat is None:
return ""
if 'riscv/virt32' in plat:
return "generic-32b-defconfig"
if 'riscv/virt64' in plat:
return "generic-64b-defconfig"
return ""
def map_xvisor_arch(a, d):
import re
if re.match('(i.86|x86.64)$', a): return 'x86'
elif re.match('armeb$', a): return 'arm'
elif re.match('aarch64$', a): return 'arm'
elif re.match('aarch64_be$', a): return 'arm'
elif re.match('aarch64_ilp32$', a): return 'arm'
elif re.match('aarch64_be_ilp32$', a): return 'arm'
elif re.match('riscv(32|64|)(eb|)$', a): return 'riscv'
else:
bb.error("cannot map '%s' to a Xvisor architecture" % a)

View File

@ -0,0 +1,44 @@
SUMMARY = "Xvisor is an open-source type-1 hypervisor, which aims at providing a monolithic, light-weight, portable, and flexible virtualization solution."
DESCRIPTION = "Xvisor primarily supports Full virtualization hence, supports a wide range of unmodified guest operating systems. Paravirtualization is optional for Xvisor and will be supported in an architecture independent manner (such as VirtIO PCI/MMIO devices) to ensure no-change in guest OS for using paravirtualization."
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS += "dtc-native dosfstools-native mtools-native"
require xvisor-configs.inc
inherit autotools-brokensep
SRCREV = "58592ef18c71526a0045935d1e8eed5e8553b7d6"
SRC_URI = "git://github.com/xvisor/xvisor.git \
file://0001-TESTS-Don-t-specify-mabi-or-march-for-RISC-V.patch \
"
S = "${WORKDIR}/git"
EXTRA_OEMAKE += "ARCH=\"${@map_xvisor_arch(d.getVar('TARGET_ARCH'), d)}\" I=${D}"
CONFIG = "${@get_oemake_config(d)}"
do_configure() {
oe_runmake ${CONFIG}
}
do_install_append() {
install -d ${D}
install -m 755 ${B}/build/vmm.* ${D}/
# We don't need this
rm ${D}/system.map
}
do_deploy () {
install -d ${DEPLOY_DIR_IMAGE}
install -m 755 ${D}/vmm.* ${DEPLOY_DIR_IMAGE}/
}
addtask deploy after do_install
FILES_${PN} += "/vmm.*"
COMPATIBLE_HOST = "(riscv64|riscv32).*"
INHIBIT_PACKAGE_STRIP = "1"