mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-05-07 04:58:57 +00:00
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 <kamil.dziezyk@arm.com> Change-Id: I4f250172f1fa599b7a3673ba0887cd49372b7556 Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user