【问题标题】:Bitbake not installing my file in the rootfs imageBitbake 没有在 rootfs 映像中安装我的文件
【发布时间】:2016-03-08 04:18:03
【问题描述】:


我创建了一个 bitbake 配方,它将我的 2 个文件(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 \
"

你能指出我做错了什么吗?

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

我将发布“固定”食谱以防有人发现它有帮助。

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 \
"

【问题讨论】:

    标签: yocto bitbake


    【解决方案1】:

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

    FILESEXTRAPATHS 不是必须的;它仅在您编写 .bbappend 文件以修改另一层中的配方时使用。

    ALLOW_EMPT_${PN} 也不需要。它用于允许 PN 为空,这仅在您创建其他包时有用。在您的情况下,您将固件文件保存在 PN 中,因此如果无法安装文件,最好在构建您的软件包时排除 bitbake 错误。

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

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

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

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

    这应该能让你起床。

    【讨论】:

    • FILESEXTRAPATHS 只在 bbappend 中使用并不完全正确,它可以添加一个路径来搜索那里的文件。它在 bb 文件中也很有用
    • 当然可以使用,但它真的有什么真正的好处吗?已经有三个目录用于查找文件,在这种情况下您还需要更多吗?
    • 我在现有的yocto框架中为我的项目做了一个层。问题是,我没有开源我的“源代码”,我们将其作为 tar 球提供给客户。我想为用户提供灵活性,让他们可以在本地机器中的任何地方保存该代码。现在为了知道我的更改保存在本地的位置,我必须使用它。如果有更好的方法请告诉我,我很乐意使用。
    • 好的,这是处理它的一种方法。我想说大多数层可能会通过使用无效 URL 在SRC_URI 中添加封闭源代码压缩包来解决这个问题。那么该层的用户有两种选择,要么直接将压缩包放在DL_DIR 中,要么将SRC_URI 更改为漂亮的。
    【解决方案2】:

    谢谢,好的开始。我终于用这种方式安装了两个 .sh 脚本。

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

        > 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 会自动在“files”文件夹中查找文件,并将它们复制到临时 ${WORKDIR} 并且第二个“install”行确保目标上的两个文件稍后都会出现在文件夹 / usr/bin。因为 ${bindir}(例如 /usr/bin)被用作复制目标,所以在这种情况下不需要 FILES_${PN}。

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2020-03-31
      • 2020-01-20
      • 2018-03-09
      • 2016-03-11
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多