文件不是从配方安装的

Files are not installed from recipe

我正在尝试创建自定义配方来签署从 u-boot.bb 生成的 u-boot 映像。

我有 2 个自定义食谱:

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.

为了签名,我不得不使用位于外部存储库中的 python 脚本形式的自定义程序。

导致问题的部分是从 u-boot.bb 配方访问已部署的 u-boot.elf 二进制文件。我找不到将 u-boot.elf 二进制文件公开给 u-boot-sign.bb 配方的方法。

从一个配方公开图像二进制文件,以便在另一个配方中访问、签名和部署的正确方法应该是什么?

为了在食谱之间和交叉编译范围之间共享文件,我在安装二进制文件时使用了 ${datadir}(通过 do_install)。这允许我通过 recipe-sysroot.

访问 FILES:${PN} 描述的所有文件

u-boot.bb - 导出配方:

…
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 - 取决于配方

…
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}

}
…

灵感来自Here

编辑

有人建议我不要使用 ${datadir} 传输这样的文件。对于中间文件,更好的方法是使用 /firmware,就像在 meta-arm.

中所做的那样

u-boot.bb - 导出配方:

…
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 - 取决于配方

…
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}
}
…

还需要在SYSROOT_DIRS的基础上加上/firmware