Home > Software design >  Files are not installed from recipe
Files are not installed from recipe

Time:12-02

I'm trying to create a custom recipe to sign a u-boot image generated from u-boot.bb.

I have 2 custom recipes:

1. u-boot.bb - clones, compiles and deploys u-boot resulting u-boot.elf.
2. u-boot-sign.bb - depends on u-boot.bb. Gets u-boot.elf, passes it through
                    custom signing procedure and deploys the result.

For signing I am forced to use a custom procedure which is in a form of python scripts located in external repository.

The part which causes a problem is accessing a deployed u-boot.elf binary file from u-boot.bb recipe. I cannot find a way to expose u-boot.elf binary file to a u-boot-sign.bb recipe.

What should be the correct way of exposing an image binary file from one recipe, to be accessed, signed and deployed in another recipe?

CodePudding user response:

For the purpose of sharing the files between recipes and between cross-compilation scope, I used ${datadir} when installing the binaries (via do_install). This allowed me to access all files described by FILES:${PN} via recipe-sysroot.

u-boot.bb - exporting recipe:

…
do_install() {
    install -d ${D}${datadir}/u-boot-2016/
    install -m 0644 ${B}/${UBOOT_ELF_BINARY} ${D}${datadir}/u-boot-2016
}

FILES:${PN} = "${datadir}/u-boot-2016"
…

u-boot-sign.bb - depending recipe

…
DEPENDS  = " u-boot python3-native"

do_sign() {
    ${STAGING_BINDIR_NATIVE}/python3-native/python3 sign.py \
                -i ${RECIPE_SYSROOT}${datadir}/u-boot-2016/${UBOOT_ELF_BINARY}

}
…

Inspiration from Here

Edit

I was advised not to transfer files like this using ${datadir}. For intermediate files the better approach would be to use to use /firmware as it is done in meta-arm.

u-boot.bb - exporting recipe:

…
do_install() {
    install -D -p -m 0644 ${B}/${UBOOT_ELF_BINARY} ${D}/firmware/${UBOOT_ELF_BINARY}
}

FILES:${PN} = "/firmware"
SYSROOT_DIRS  = "/firmware"
…

u-boot-sign.bb - depending recipe

…
DEPENDS  = " u-boot python3-native"

do_sign() {
    ${STAGING_BINDIR_NATIVE}/python3-native/python3 sign.py \
                -i ${RECIPE_SYSROOT}/firmware/u-boot-2016/${UBOOT_ELF_BINARY}
}
…

It also requires to add /firmware to SYSROOT_DIRS.

  • Related