Bitbake没有在rootfs映像中安装我的文件

时间:2015-12-03 13:56:43

标签: yocto bitbake


我创建了一个bitbake配方,将我的两个文件(VPU的固件二进制文件)复制到目标根文件系统上的/ lib / firmware /目录中。

我尝试了很多选项,所以我现在不确定我的食谱中的内容是不必要/多余的以及需要什么。 我认为FILESEXTRAPATHS ..,SRC_URI ..和do_install ..应该足够了,但它并不适用于它,也不适用于所有其他东西。

DESCRIPTION = "VPU libraries provided by fsl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"

PACKAGE_ARCH = "all"
ALLOW_EMPTY_${PN} = "1"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
    file://vpu_fw_imx6d.bin \
    file://vpu_fw_imx6q.bin \
"

INSANE_SKIP_${PN} += "installed-vs-shipped"

do_install () {
    install -d ${D}${base_libdir}/firmware/
    cp ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
    cp ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
    chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin
    chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin
}
PACKAGES = "${PN}"
FILES_${PN} += " \
        ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin \
        ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin \
"

你能指出我做错了吗?

编辑:
安德斯的回答确实帮助并解决了这个问题。

我发帖"修复"如果有人发现它有用,可以使用食谱。

DESCRIPTION = "VPU libraries provided by fsl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"

PACKAGE_ARCH = "all"

SRC_URI += " \
    file://vpu_fw_imx6d.bin \
    file://vpu_fw_imx6q.bin \
"

do_install () {
    install -d ${D}${base_libdir}/firmware/
    install -m 755 ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
    install -m 755 ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
}

FILES_${PN} += " \
        ${base_libdir}/firmware/vpu_fw_imx6d.bin \
        ${base_libdir}/firmware/vpu_fw_imx6q.bin \
"

2 个答案:

答案 0 :(得分:10)

删除所有不必要的行,只是为了安全起见。

FILESEXTRAPATHS没有必要;它只在您编写.bbappend文件以修改其他图层中的配方时使用。

ALLOW_EMPT_${PN}也不需要。它曾用于允许PN为空,这仅在您创建其他包时才有用。在您的情况下,您可以使用PN验证固件文件,因此如果无法安装文件,最好在构建软件包时出现bitbake错误。

INSANE_SKIP_${PN} += "installed-vs-shipped"也不需要。只有当您在do_install中安装未放入软件包的文件时,才需要它。通常,建议您不要安装它们或删除文件。

你的do_install()应该可以正常工作;虽然我建议使用install代替cpchmod。这样,您还可以确保所有者和群组是正确的。 (检查这个是作为Jethro的新QA检查添加的。)

PACKAGES = "${PN}"不需要。

${D}定义中删除FILES_${PN}FILES中的路径应该是目标上的路径(即不包括D - 目录)。

这应该可以帮助你了解

答案 1 :(得分:2)

谢谢,很好的起点。我终于以这种方式安装了两个.sh脚本。

我创建了这个文件结构(Yocto自动知道文件夹名称“ files”,最好保持原样):

    > bitbake-layers create-layer meta-mylayer
    > cp -r meta-mylayer ../sources/yocto/meta-layers/
    > cat >> conf/bblayers.conf << EOF
    > ${BSPDIR}/sources/meta-mynetworklayer \
    > EOF
    > pwd
    /yocto/meta-layers/meta-mylayer/recipes-tools/somename
    > tree .
    .
    ├── files
    │   ├── somescript1.sh
    │   └── somescript2.sh
    └── somename.bb

我在local.conf中添加了对“ somename”的防御:

IMAGE_INSTALL_append = " somename"

somename.bb文件的外观如下:

DESCRIPTION = "Some description"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI += " file://somescript1.sh \
             file://somescript2.sh \
           "

inherit allarch
do_compile[noexec] = "1"

do_install() {
    install -d ${D}${bindir}
    install -m 0770 ${WORKDIR}/somescript*.sh ${D}/${bindir}
}

Yocto将自动在“文件”文件夹中找到文件,它将它们复制到临时$ {WORKDIR}中,第二行“安装”行确保两个文件稍后都将出现在目标文件夹中/ usr / bin。因为$ {bindir}(例如/ usr / bin)用作复制目标,所以在这种情况下不需要FILES _ $ {PN}。