summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denys@ti.com>2019-07-05 21:03:20 +0000
committerDenys Dmytriyenko <denys@ti.com>2019-07-08 16:54:41 +0000
commitced12ba18729b75c3ff7ff629376d3a52e494ce1 (patch)
tree1155d83e1749bee70ef4ab75e8557c1e5aa48496
parent799f03e730b5f5eb59643d88c95ed07f89fb7655 (diff)
downloadmeta-ti-ced12ba18729b75c3ff7ff629376d3a52e494ce1.tar.gz
jailhouse: add recipe for Jailhouse module, FW, cells, inmates and basic demo
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@ti.com: Update for public trees] Signed-off-by: Denys Dmytriyenko <denys@ti.com> Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com> Reviewed-by: Subhajit Paul <subhajit_paul@ti..com> Tested-by: Subhajit Paul <subhajit_paul@ti..com> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
-rw-r--r--recipes-kernel/jailhouse/jailhouse-arch.inc20
-rw-r--r--recipes-kernel/jailhouse/jailhouse_git.bb141
2 files changed, 161 insertions, 0 deletions
diff --git a/recipes-kernel/jailhouse/jailhouse-arch.inc b/recipes-kernel/jailhouse/jailhouse-arch.inc
new file mode 100644
index 00000000..e06ec231
--- /dev/null
+++ b/recipes-kernel/jailhouse/jailhouse-arch.inc
@@ -0,0 +1,20 @@
1# Set jailhouse architecture JH_ARCH variable
2#
3# return value must match one of architectures supported by jailhouse
4#
5valid_jh_archs = "x86 arm"
6
7def map_jh_arch(a, d):
8 import re
9
10 valid_jh_archs = d.getVar('valid_jh_archs', True).split()
11
12 if re.match('(i.86|athlon|x86.64)$', a): return 'x86'
13 elif re.match('armeb$', a): return 'arm'
14 elif re.match('aarch64$', a): return 'arm64'
15 elif re.match('aarch64_be$', a): return 'arm64'
16 elif a in valid_jh_archs: return a
17 else:
18 bb.error("cannot map '%s' to a jailhouse supported architecture" % a)
19
20export JH_ARCH = "${@map_jh_arch(d.getVar('TARGET_ARCH', True), d)}"
diff --git a/recipes-kernel/jailhouse/jailhouse_git.bb b/recipes-kernel/jailhouse/jailhouse_git.bb
new file mode 100644
index 00000000..18b984f3
--- /dev/null
+++ b/recipes-kernel/jailhouse/jailhouse_git.bb
@@ -0,0 +1,141 @@
1SUMMARY = "Linux-based partitioning hypervisor"
2DESCRIPTION = "Jailhouse is a partitioning Hypervisor based on Linux. It is able to run bare-metal applications or (adapted) \
3operating systems besides Linux. For this purpose, it configures CPU and device virtualization features of the hardware \
4platform in a way that none of these domains, called 'cells' here, can interfere with each other in an unacceptable way."
5HOMEPAGE = "https://github.com/siemens/jailhouse"
6SECTION = "jailhouse"
7LICENSE = "GPL-2.0 & BSD-2-Clause"
8
9LIC_FILES_CHKSUM = " \
10 file://COPYING;md5=9fa7f895f96bde2d47fd5b7d95b6ba4d \
11"
12
13PV = "0.10+git${SRCPV}"
14SRCREV = "5c6aa2b78c6485e9455d9d1441df3d695e1a8b4e"
15BRANCH = "ti-jailhouse-0.10"
16
17SRC_URI = " \
18 git://git.ti.com/jailhouse/ti-jailhouse.git;protocol=git;branch=${BRANCH} \
19"
20
21DEPENDS = "virtual/kernel dtc-native python-mako-native python-mako make-native"
22RDEPENDS_${PN} += "\
23 python-curses\
24 python-datetime\
25 python-argparse\
26 python-mmap\
27"
28
29S = "${WORKDIR}/git"
30
31require jailhouse-arch.inc
32inherit module pythonnative bash-completion deploy
33
34PACKAGE_ARCH = "${MACHINE_ARCH}"
35
36JH_DATADIR ?= "${datadir}/jailhouse"
37JH_EXEC_DIR ?= "${libexecdir}/jailhouse"
38CELL_DIR ?= "${JH_DATADIR}/cells"
39CELLCONF_DIR ?= "${JH_DATADIR}/configs"
40INMATES_DIR ?= "${JH_DATADIR}/inmates"
41
42JH_CONFIG ?= "${S}/ci/jailhouse-config-x86.h"
43JH_CONFIG_k3 ?= "${S}/ci/jailhouse-config-k3.h"
44
45JH_CELL_FILES ?= "*.cell"
46JH_CELL_FILES_k3 ?= "k3-*.cell"
47
48JH_INMATE_DTB ?= ""
49JH_INMATE_DTB_am65xx-evm ?= "inmate-k3-am654.dtb"
50JH_INMATE_DTB_j7-evm ?= "inmate-k3-j721e-evm.dtb"
51
52JH_LINUX_DEMO_CELL ?= ""
53JH_LINUX_DEMO_CELL_am65xx-evm ?= "k3-am654-linux-demo.cell"
54JH_LINUX_DEMO_CELL_j7-evm ?= "k3-j721e-evm-linux-demo.cell"
55
56JH_SYSCONFIG_CELL ?= ""
57JH_SYSCONFIG_CELL_am65xx-evm ?= "k3-am654.cell"
58JH_SYSCONFIG_CELL_j7-evm ?= "k3-j721e-evm.cell"
59
60JH_CMDLINE ?= ""
61JH_CMDLINE_k3 ?= "console=ttyS1,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait earlycon=ns16550a,mmio32,0x2810000"
62
63do_configure() {
64 if [ -d ${STAGING_DIR_HOST}/${CELLCONF_DIR} ];
65 then
66 cp ${STAGING_DIR_HOST}/${CELLCONF_DIR}/*.c ${S}/configs/
67 fi
68
69 cp -av ${JH_CONFIG} ${S}/include/jailhouse/config.h
70}
71
72USER_SPACE_CFLAGS = '${CFLAGS} -DLIBEXECDIR=\\\"${libexecdir}\\\" \
73 -DJAILHOUSE_VERSION=\\\"$JAILHOUSE_VERSION\\\" \
74 -Wall -Wextra -Wmissing-declarations -Wmissing-prototypes -Werror \
75 -I../driver'
76
77TOOLS_SRC_DIR = "${S}/tools"
78TOOLS_OBJ_DIR = "${S}/tools"
79
80do_compile() {
81 oe_runmake V=1 ARCH=${JH_ARCH} CROSS_COMPILE=${TARGET_PREFIX} KDIR=${STAGING_KERNEL_BUILDDIR}
82}
83
84python __anonymous () {
85 d.appendVarFlag('do_install', 'depends', ' virtual/kernel:do_deploy')
86 initrd = d.getVar('INITRAMFS_IMAGE', True)
87 if initrd:
88 d.appendVarFlag('do_install', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
89}
90
91do_install() {
92 oe_runmake ARCH=${JH_ARCH} CROSS_COMPILE=${TARGET_PREFIX} KDIR=${STAGING_KERNEL_BUILDDIR} DESTDIR=${D} install
93
94 install -d ${D}${CELL_DIR}
95 install -m 0644 ${B}/configs/${JH_ARCH}/${JH_CELL_FILES} ${D}${CELL_DIR}/
96
97 install -d ${D}${INMATES_DIR}
98 install -m 0644 ${B}/inmates/demos/${JH_ARCH}/*.bin ${D}${INMATES_DIR}
99
100 install -d ${D}/boot
101
102 if [ -n "${JH_INMATE_DTB}" -a -n "${JH_LINUX_DEMO_CELL}" ]; then
103 cd ${TOOLS_SRC_DIR}
104
105 echo "#! /bin/sh" > ${D}${JH_DATADIR}/linux-demo.sh
106 echo "jailhouse enable ${CELL_DIR}/${JH_SYSCONFIG_CELL}" >> ${D}${JH_DATADIR}/linux-demo.sh
107 ./jailhouse-cell-linux -w ${D}${JH_DATADIR}/${JH_INMATE_DTB} \
108 -a ${JH_ARCH} -c "${JH_CMDLINE}" \
109 -d ../configs/${JH_ARCH}/dts/${JH_INMATE_DTB} \
110 ${D}${CELL_DIR}/${JH_LINUX_DEMO_CELL} \
111 ${DEPLOY_DIR_IMAGE}/Image \
112 | tr -cd '\11\12\15\40-\176' \
113 >> ${D}${JH_DATADIR}/linux-demo.sh
114
115 sed -i -e 's,^Modified device tree written.*,,g' ${D}${JH_DATADIR}/linux-demo.sh
116 sed -i -e 's,\${D},,g' ${D}${JH_DATADIR}/linux-demo.sh
117 sed -i -e 's, linux-loader.bin, ${JH_EXEC_DIR}/linux-loader.bin,g' ${D}${JH_DATADIR}/linux-demo.sh
118 sed -i -e 's,\${DEPLOY_DIR_IMAGE},/boot,g' ${D}${JH_DATADIR}/linux-demo.sh
119 sed -i -e '/^\s*$/d' ${D}${JH_DATADIR}/linux-demo.sh
120 chmod +x ${D}${JH_DATADIR}/linux-demo.sh
121 fi
122}
123
124
125PACKAGE_BEFORE_PN = "kernel-module-jailhouse"
126FILES_${PN} = "${base_libdir}/firmware ${libexecdir} ${sbindir} ${JH_DATADIR} /boot"
127
128INSANE_SKIP_${PN} = "ldflags"
129
130KERNEL_MODULE_AUTOLOAD += "jailhouse"
131
132# Any extra cells/inmates from external recipes/packages
133CELLS = ""
134
135python __anonymous () {
136 # Setup DEPENDS and RDEPENDS to included cells"
137 cells = d.getVar('CELLS', True) or ""
138 for cell in cells.split():
139 d.appendVar('DEPENDS', ' ' + cell)
140 d.appendVar('RDEPENDS_${PN}', ' ' + cell)
141}