diff options
Diffstat (limited to 'distribution/yocto-advanced/meta-schulung-extended/recipes-bsp/boot/qemu-boot-files.bb')
| -rw-r--r-- | distribution/yocto-advanced/meta-schulung-extended/recipes-bsp/boot/qemu-boot-files.bb | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/distribution/yocto-advanced/meta-schulung-extended/recipes-bsp/boot/qemu-boot-files.bb b/distribution/yocto-advanced/meta-schulung-extended/recipes-bsp/boot/qemu-boot-files.bb new file mode 100644 index 0000000..e885d25 --- /dev/null +++ b/distribution/yocto-advanced/meta-schulung-extended/recipes-bsp/boot/qemu-boot-files.bb @@ -0,0 +1,62 @@ +# specify build dependencies +DEPENDS += "linux-basic" +DEPENDS += "u-boot" +DEPENDS += "u-boot-mkimage-native" +DEPENDS += "keys-native" + +# fit image configuration file +SRC_URI = "file://signed-config.its" + +# license information +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" + +# create signed fit image for kernel/devicetree and uimage for qemu booting +do_compile () { + # extract TEXT_BASE from u-boot configuration + TEXT_BASE=`grep CONFIG_SYS_TEXT_BASE \ + ${PKG_CONFIG_SYSROOT_DIR}${datadir}/u-boot/u-boot.cfg | \ + awk '{print $3}'` + + cp ${DEPLOY_DIR_IMAGE}/devicetree-${DTB} dtb + cp ${DEPLOY_DIR_IMAGE}/zImage . + cp ${WORKDIR}/signed-config.its . + + # create fit image with signed configuration + # and update the dtb to contain the public key + uboot-mkimage -f signed-config.its \ + -k ${STAGING_DIR_NATIVE}${datadir_native}/keys \ + -K dtb -r image.fit + + # create the final u-boot image by appending the new dtb + cat ${DEPLOY_DIR_IMAGE}/u-boot-nodtb.bin dtb > u-boot-dtb.bin + + # pack u-boot into a uimage file so we can + # trick qemu into booting u-boot + uboot-mkimage -A ${HOST_ARCH} -C none -T kernel -O linux \ + -d u-boot-dtb.bin -a $TEXT_BASE -e $TEXT_BASE u-boot.uimg +} + +# specify task dependencies for compiling +# - bitbake only knows about dependencies that are specified +# otherwise it assumes it can do things in parallel +# - the build dependencies ${DEPEND} only create a task dependency +# on do_install (do_deploy comes after do_install) +# - for linux-basic and u-boot-sample we need to wait for do_deploy +# to complete because our do_compile uses their deployed files +do_compile[depends] += "linux-basic:do_deploy" +do_compile[depends] += "u-boot:do_deploy" + +# use the deploy class (poky/meta/deploy.bbclass) +# - this officially creates a deploy task +# - this creates and sets ${DEPLOYDIR} +inherit deploy + +# deploy fit image (kernel/devicetree) and uimage (u-boot) +do_deploy () { + install -D -m 0644 image.fit ${DEPLOYDIR}/image.fit + install -D -m 0644 u-boot.uimg ${DEPLOYDIR}/u-boot.uimg +} + +# set do_deploy to occur after do_install +addtask do_deploy after do_install |
