summaryrefslogtreecommitdiffstats
path: root/recipes-kernel
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denys@ti.com>2019-07-05 21:03:20 +0000
committerDenys Dmytriyenko <denys@ti.com>2019-07-09 02:24:24 +0000
commitebef50ab00e9ef1bac435a30d7cfc3102541c0c6 (patch)
treefad147446c11715d42bf0a291c93a66453be7a5c /recipes-kernel
parent22146d3620528404c686c1cdce9443db4abd0c0e (diff)
downloadmeta-ti-ebef50ab00e9ef1bac435a30d7cfc3102541c0c6.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>
Diffstat (limited to 'recipes-kernel')
-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}