From 7c34d0affc8124cc00c88a349a21b7c4f899ee52 Mon Sep 17 00:00:00 2001 From: Kamil Dziezyk Date: Fri, 20 Nov 2020 12:37:25 +0100 Subject: [PATCH] arm-autonomy/xen-devicetree: check if kernel Image size is correct This patch brings following improvements: * Adds a check for kernel size defined by XEN_DEVICETREE_DOM0_SIZE variable, whether it is greater or equal to actual kernel size. If not, bitbake warns user and adjusts value of XEN_DEVICETREE_DOM0_SIZE. * Adds 'virtual/kernel:do_deploy' as a mandatory xen-devicetree dependency via XEN_DEVICETREE_DEPEND variable. Issue-Id: SCM-1567 Signed-off-by: Kamil Dziezyk Change-Id: I4f250172f1fa599b7a3673ba0887cd49372b7556 Signed-off-by: Jon Mason --- .../xen-devicetree/xen-devicetree.bb | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/meta-arm-autonomy/recipes-extended/xen-devicetree/xen-devicetree.bb b/meta-arm-autonomy/recipes-extended/xen-devicetree/xen-devicetree.bb index ccbb3876..0369b96a 100644 --- a/meta-arm-autonomy/recipes-extended/xen-devicetree/xen-devicetree.bb +++ b/meta-arm-autonomy/recipes-extended/xen-devicetree/xen-devicetree.bb @@ -14,7 +14,9 @@ DESCRIPTION = "Add entries in DTB for Xen and Dom0" # Please refer to documentation/xen-devicetree.md for documentation on those # parameters -XEN_DEVICETREE_DEPEND ?= "virtual/kernel:do_deploy" +# kernel size is passed to xen via xen.dtb so wee need to add +# 'virtual/kernel:do_deploy' as a dependency +XEN_DEVICETREE_DEPEND_append = " virtual/kernel:do_deploy" XEN_DEVICETREE_DTBS ?= "${KERNEL_DEVICETREE}" XEN_DEVICETREE_XEN_BOOTARGS ?= "noreboot dom0_mem=${XEN_DEVICETREE_DOM0_MEM}" XEN_DEVICETREE_DOM0_MEM ?= "1024M" @@ -67,6 +69,33 @@ do_deploy() { done } do_deploy[depends] += "${XEN_DEVICETREE_DEPEND}" +do_deploy[prefuncs] += "calc_xen_dtb_dom0_size" addtask deploy after do_install +python calc_xen_dtb_dom0_size() { + from math import ceil + size = 0 + if d.getVar('KERNEL_IMAGE_MAXSIZE'): + bb.note('size calculation based on KERNEL_IMAGE_MAXSIZE') + size = int(d.getVar('KERNEL_IMAGE_MAXSIZE')) * 1024 + else: + kernel = os.path.realpath(d.getVar('DEPLOY_DIR_IMAGE') + '/' +\ + d.getVar('KERNEL_IMAGETYPE')) + size = os.stat(kernel).st_size + bb.note('size calculation based on kernel Image file: %s' % kernel) + + bb.note('size in bytes: %d' % size) + # Ceil to MiB + size_required = ceil(size / (2 ** 20)) * (2 ** 20) + size_defined = int(d.getVar('XEN_DEVICETREE_DOM0_SIZE'), 16) + + if size_required > size_defined: + bb.warn ("Wrong kernel size setting inside xen dtb!\n"\ + "Required:\t%(req)d (%(req)#010X)\n"\ + "Requested:\t%(def)d (%(def)#010X)"\ + % {"req": size_required, "def": size_defined}) + bb.warn ("Overriding XEN_DEVICETREE_DOM0_SIZE with "\ + "%(req)d (%(req)#010X)" % {"req": size_required}) + d.setVar('XEN_DEVICETREE_DOM0_SIZE', hex(size_required)) +}