[meta-ti] [thud PATCH v1] jailhouse: add recipe for Jailhouse module, FW, cells, inmates and basic demo

Nikhil Devshatwar nikhil.nd at ti.com
Fri Jul 5 01:54:58 PDT 2019


From: Denys Dmytriyenko <denys at ti.com>

Builds the Jailhouse kernel module, hypervisor binaries
and all the cell configs for root cell and other demos.
Generate the linux-demo loader script without initramfs.

Supports am65x and j7-evm machines

[nikhil.nd at ti.com: Update for public trees]

Signed-off-by: Denys Dmytriyenko <denys at ti.com>
Signed-off-by: Nikhil Devshatwar <nikhil.nd at ti.com>
---
 recipes-bsp/jailhouse/jailhouse-arch.inc           |  20 +++
 .../jailhouse/0001-Makefile-fixes-for-yocto.patch  |  84 ++++++++++++
 recipes-bsp/jailhouse/jailhouse_git.bb             | 144 +++++++++++++++++++++
 3 files changed, 248 insertions(+)
 create mode 100644 recipes-bsp/jailhouse/jailhouse-arch.inc
 create mode 100644 recipes-bsp/jailhouse/jailhouse/0001-Makefile-fixes-for-yocto.patch
 create mode 100644 recipes-bsp/jailhouse/jailhouse_git.bb

diff --git a/recipes-bsp/jailhouse/jailhouse-arch.inc b/recipes-bsp/jailhouse/jailhouse-arch.inc
new file mode 100644
index 0000000..e06ec23
--- /dev/null
+++ b/recipes-bsp/jailhouse/jailhouse-arch.inc
@@ -0,0 +1,20 @@
+# Set jailhouse architecture JH_ARCH variable
+#
+# return value must match one of architectures supported by jailhouse
+#
+valid_jh_archs = "x86 arm"
+
+def map_jh_arch(a, d):
+    import re
+
+    valid_jh_archs = d.getVar('valid_jh_archs', True).split()
+
+    if   re.match('(i.86|athlon|x86.64)$', a):  return 'x86'
+    elif re.match('armeb$', a):                 return 'arm'
+    elif re.match('aarch64$', a):               return 'arm64'
+    elif re.match('aarch64_be$', a):            return 'arm64'
+    elif a in valid_jh_archs:                   return a
+    else:
+        bb.error("cannot map '%s' to a jailhouse supported architecture" % a)
+
+export JH_ARCH = "${@map_jh_arch(d.getVar('TARGET_ARCH', True), d)}"
diff --git a/recipes-bsp/jailhouse/jailhouse/0001-Makefile-fixes-for-yocto.patch b/recipes-bsp/jailhouse/jailhouse/0001-Makefile-fixes-for-yocto.patch
new file mode 100644
index 0000000..3f71761
--- /dev/null
+++ b/recipes-bsp/jailhouse/jailhouse/0001-Makefile-fixes-for-yocto.patch
@@ -0,0 +1,84 @@
+From a079feba07435c73b294202fb56b2d425d107ca5 Mon Sep 17 00:00:00 2001
+From: Nikhil Devshatwar <nikhil.nd at ti.com>
+Date: Fri, 5 Jul 2019 13:35:25 +0530
+Subject: [PATCH] Makefile fixes for yocto
+
+Fix some LDFLAG in the toplevel Kbuild
+
+Avoid building and installing tools.
+It has many dependencies on python, pyjailhouse, man pages,
+bash completion, etc
+
+Signed-off-by: Nikhil Devshatwar <nikhil.nd at ti.com>
+---
+ Kbuild         | 2 +-
+ Makefile       | 4 ----
+ tools/Makefile | 8 ++++----
+ 3 files changed, 5 insertions(+), 9 deletions(-)
+
+diff --git a/Kbuild b/Kbuild
+index 7cbde52..054e068 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -51,7 +51,7 @@ GEN_PCI_DEFS_PY := $(obj)/pyjailhouse/pci_defs.py
+ $(GEN_PCI_DEFS_PY): $(src)/scripts/gen_pci_defs.sh
+ 	$(call if_changed,gen_pci_defs)
+ 
+-subdir-y := driver hypervisor configs inmates tools
++subdir-y := driver hypervisor configs inmates
+ 
+ subdir-ccflags-y := -Werror
+ 
+diff --git a/Makefile b/Makefile
+index 7401739..546be35 100644
+--- a/Makefile
++++ b/Makefile
+@@ -53,10 +53,6 @@ tool_inmates_install: $(DESTDIR)$(libexecdir)/jailhouse
+ 	$(INSTALL_DATA) inmates/tools/$(ARCH)/*.bin $<
+ 
+ install: modules_install firmware_install tool_inmates_install
+-	$(Q)$(MAKE) -C tools $@ src=.
+-ifeq ($(strip $(PYTHON_PIP_USABLE)), yes)
+-	$(PIP) install --upgrade --force-reinstall $(PIP_ROOT) .
+-endif
+ 
+ .PHONY: modules_install install clean firmware_install modules tools docs \
+ 	docs_clean
+diff --git a/tools/Makefile b/tools/Makefile
+index 08fd361..b5c117d 100644
+--- a/tools/Makefile
++++ b/tools/Makefile
+@@ -23,7 +23,6 @@ KBUILD_CFLAGS := -g -O3 -DLIBEXECDIR=\"$(libexecdir)\" \
+ 	-D__LINUX_COMPILER_TYPES_H \
+ 	-DJAILHOUSE_VERSION=\"$(shell cat $(src)/../VERSION)\" $(EXTRA_CFLAGS)
+ # prior to 4.19
+-LDFLAGS :=
+ # since 4.19
+ KBUILD_LDFLAGS :=
+ 
+@@ -101,7 +100,7 @@ endef
+ targets += jailhouse.o
+ 
+ $(obj)/jailhouse: $(obj)/jailhouse.o
+-	$(call if_changed,ld)
++	$(LD) $(LDFLAGS) -o $@ $^
+ 
+ CFLAGS_jailhouse-gcov-extract.o	:= -I$(src)/../hypervisor/include \
+ 	-I$(src)/../hypervisor/arch/$(SRCARCH)/include
+@@ -112,10 +111,11 @@ targets += jailhouse-gcov-extract.o
+ always += jailhouse-gcov-extract
+ 
+ $(obj)/jailhouse-gcov-extract: $(obj)/jailhouse-gcov-extract.o
+-	$(call if_changed,ld)
++	$(LD) $(LDFLAGS) -o $@ $^
+ 
+ $(obj)/jailhouse-config-collect: $(src)/jailhouse-config-create $(src)/jailhouse-config-collect.tmpl
+-	$(call if_changed,gen_collect)
++	$< -g $@; \
++	chmod +x $@
+ 
+ targets += $(MAN8_PAGES)
+ always +=  $(MAN8_PAGES)
+-- 
+2.7.4
+
diff --git a/recipes-bsp/jailhouse/jailhouse_git.bb b/recipes-bsp/jailhouse/jailhouse_git.bb
new file mode 100644
index 0000000..78eb801
--- /dev/null
+++ b/recipes-bsp/jailhouse/jailhouse_git.bb
@@ -0,0 +1,144 @@
+SUMMARY = "Linux-based partitioning hypervisor"
+DESCRIPTION = "Jailhouse is a partitioning Hypervisor based on Linux. It is able to run bare-metal applications or (adapted) \
+operating systems besides Linux. For this purpose, it configures CPU and device virtualization features of the hardware \
+platform in a way that none of these domains, called 'cells' here, can interfere with each other in an unacceptable way."
+HOMEPAGE = "https://github.com/siemens/jailhouse"
+SECTION = "jailhouse"
+LICENSE = "GPL-2.0 & BSD-2-Clause"
+
+LIC_FILES_CHKSUM = " \
+    file://COPYING;md5=9fa7f895f96bde2d47fd5b7d95b6ba4d \
+"
+
+PV = "0.10+git${SRCPV}"
+SRCREV = "5c6aa2b78c6485e9455d9d1441df3d695e1a8b4e"
+BRANCH = "ti-jailhouse-0.10"
+
+SRC_URI = " \
+    git://git.ti.com/jailhouse/ti-jailhouse.git;protocol=git;branch=${BRANCH} \
+    file://0001-Makefile-fixes-for-yocto.patch \
+"
+
+DEPENDS = "virtual/kernel dtc-native python-mako-native python-mako make-native"
+RDEPENDS_${PN} += "\
+	python-curses\
+	python-datetime\
+	python-argparse\
+	python-mmap\
+"
+
+S = "${WORKDIR}/git"
+
+require jailhouse-arch.inc
+inherit module pythonnative bash-completion deploy
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+JH_DATADIR ?= "${datadir}/jailhouse"
+JH_EXEC_DIR ?= "${libexecdir}/jailhouse"
+CELL_DIR ?= "${JH_DATADIR}/cells"
+CELLCONF_DIR ?= "${JH_DATADIR}/configs"
+INMATES_DIR ?= "${JH_DATADIR}/inmates"
+
+JH_CONFIG ?= "${S}/ci/jailhouse-config-x86.h"
+JH_CONFIG_k3 ?= "${S}/ci/jailhouse-config-k3.h"
+
+JH_CELL_FILES ?= "*.cell"
+JH_CELL_FILES_k3 ?= "k3-*.cell"
+
+JH_INMATE_DTB ?= ""
+JH_INMATE_DTB_am65xx-evm ?= "inmate-k3-am654.dtb"
+JH_INMATE_DTB_j7-evm ?= "inmate-k3-j721e-evm.dtb"
+
+JH_LINUX_DEMO_CELL ?= ""
+JH_LINUX_DEMO_CELL_am65xx-evm ?= "k3-am654-linux-demo.cell"
+JH_LINUX_DEMO_CELL_j7-evm ?= "k3-j721e-evm-linux-demo.cell"
+
+JH_SYSCONFIG_CELL ?= ""
+JH_SYSCONFIG_CELL_am65xx-evm ?= "k3-am654.cell"
+JH_SYSCONFIG_CELL_j7-evm ?= "k3-j721e-evm.cell"
+
+JH_CMDLINE ?= ""
+JH_CMDLINE_k3 ?= "console=ttyS1,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait earlycon=ns16550a,mmio32,0x2810000"
+
+do_configure() {
+	if [ -d ${STAGING_DIR_HOST}/${CELLCONF_DIR} ]; 
+	then
+		cp ${STAGING_DIR_HOST}/${CELLCONF_DIR}/*.c ${S}/configs/
+	fi
+
+	cp -av ${JH_CONFIG} ${S}/include/jailhouse/config.h
+}
+
+USER_SPACE_CFLAGS = '${CFLAGS} -DLIBEXECDIR=\\\"${libexecdir}\\\" \
+                    -DJAILHOUSE_VERSION=\\\"$JAILHOUSE_VERSION\\\" \
+                    -Wall -Wextra -Wmissing-declarations -Wmissing-prototypes -Werror \
+                    -I../driver'
+
+TOOLS_SRC_DIR = "${S}/tools"
+TOOLS_OBJ_DIR = "${S}/tools"
+
+do_compile() {
+	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+	oe_runmake V=1 ARCH=${JH_ARCH} CROSS_COMPILE=${TARGET_PREFIX} KDIR=${STAGING_KERNEL_BUILDDIR} CC="${KERNEL_CC}" LD="${KERNEL_LD}"
+}
+
+python __anonymous () {
+	d.appendVarFlag('do_install', 'depends', ' virtual/kernel:do_deploy')
+	initrd = d.getVar('INITRAMFS_IMAGE', True)
+	if initrd:
+		d.appendVarFlag('do_install', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
+}
+
+do_install() {
+	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+	oe_runmake ARCH=${JH_ARCH} CROSS_COMPILE=${TARGET_PREFIX} KDIR=${STAGING_KERNEL_BUILDDIR} CC="${KERNEL_CC}" LD="${KERNEL_LD}" DESTDIR=${D} install
+
+	install -d ${D}${CELL_DIR}
+	install -m 0644 ${B}/configs/${JH_ARCH}/${JH_CELL_FILES} ${D}${CELL_DIR}/
+
+	install -d ${D}${INMATES_DIR}
+	install -m 0644 ${B}/inmates/demos/${JH_ARCH}/*.bin ${D}${INMATES_DIR}
+
+	install -d ${D}/boot
+
+	if [ -n "${JH_INMATE_DTB}" -a -n "${JH_LINUX_DEMO_CELL}" ]; then
+		cd ${TOOLS_SRC_DIR}
+
+		echo "#! /bin/sh" > ${D}${JH_DATADIR}/linux-demo.sh
+		echo "jailhouse enable ${CELL_DIR}/${JH_SYSCONFIG_CELL}" >> ${D}${JH_DATADIR}/linux-demo.sh
+		./jailhouse-cell-linux -w ${D}${JH_DATADIR}/${JH_INMATE_DTB} \
+			-a ${JH_ARCH} -c ${JH_CMDLINE} \
+			-d ../configs/${JH_ARCH}/dts/${JH_INMATE_DTB} \
+			${D}${CELL_DIR}/${JH_LINUX_DEMO_CELL} \
+			${DEPLOY_DIR_IMAGE}/Image \
+			| tr -cd '\11\12\15\40-\176' \
+			>> ${D}${JH_DATADIR}/linux-demo.sh
+
+		sed -i -e 's,^Modified device tree written.*,,g' ${D}${JH_DATADIR}/linux-demo.sh
+		sed -i -e 's,\${D},,g' ${D}${JH_DATADIR}/linux-demo.sh
+		sed -i -e 's, linux-loader.bin, ${JH_EXEC_DIR}/linux-loader.bin,g' ${D}${JH_DATADIR}/linux-demo.sh
+		sed -i -e 's,\${DEPLOY_DIR_IMAGE},/boot,g' ${D}${JH_DATADIR}/linux-demo.sh
+		sed -i -e '/^\s*$/d' ${D}${JH_DATADIR}/linux-demo.sh
+		chmod +x ${D}${JH_DATADIR}/linux-demo.sh
+	fi
+}
+
+
+PACKAGE_BEFORE_PN = "kernel-module-jailhouse"
+FILES_${PN} = "${base_libdir}/firmware ${libexecdir} ${sbindir} ${JH_DATADIR} /boot"
+
+INSANE_SKIP_${PN} = "ldflags"
+
+KERNEL_MODULE_AUTOLOAD += "jailhouse"
+
+# Any extra cells/inmates from external recipes/packages
+CELLS = ""
+
+python __anonymous () {
+    # Setup DEPENDS and RDEPENDS to included cells"
+    cells = d.getVar('CELLS', True) or ""
+    for cell in cells.split():
+        d.appendVar('DEPENDS', ' ' + cell)
+        d.appendVar('RDEPENDS_${PN}', ' ' + cell)
+}
-- 
1.9.1



More information about the meta-ti mailing list