Bitbake 没有在 rootfs 映像中安装我的文件
Bitbake not installing my file in the rootfs image
我创建了一个 bitbake 配方,它将我的 2 个文件(VPU 的固件二进制文件)复制到目标根文件系统上的 /lib/firmware/ 目录中。
我尝试了很多选择,所以我现在不确定我的食谱中有什么 unnecessary/redundant 以及需要什么。
我认为 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 \
"
你能指出我做错了什么吗?
编辑:
安德斯的回答确实帮助解决了问题。
我正在发布 "fixed" 食谱以防有人觉得它有用。
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 \
"
为了安全起见,删除所有不必要的行。
FILESEXTRAPATHS
没有必要;它仅在您编写 .bbappend
文件以修改另一层中的配方时使用。
ALLOW_EMPT_${PN}
也不需要。它用于允许 PN 为空,这仅在您创建其他包时才有用。在您的情况下,您需要 PN 中的固件文件,因此如果无法安装文件,最好在构建软件包时排除 bitbake 错误。
INSANE_SKIP_${PN} += "installed-vs-shipped"
也不需要。仅当您在 do_install
中安装您未放入包中的文件时才需要。通常,建议您不要安装它们或删除文件。
您的 do_install()
应该可以正常工作;尽管我建议使用 install
而不是 cp
和 chmod
。这样你也可以确保所有者和组是正确的。 (此检查已添加为 Jethro 中的新 QA 检查)。
PACKAGES = "${PN}"
不需要。
从您的 FILES_${PN}
定义中删除 ${D}
。 FILES
中的路径应该是目标上的路径(即不包括 D
目录)。
这应该会让你兴奋起来运行。
谢谢,很好的起点。我终于这样安装了两个.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
我将 "somename" 的引用添加到 local.conf:
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}。
我创建了一个 bitbake 配方,它将我的 2 个文件(VPU 的固件二进制文件)复制到目标根文件系统上的 /lib/firmware/ 目录中。
我尝试了很多选择,所以我现在不确定我的食谱中有什么 unnecessary/redundant 以及需要什么。 我认为 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 \
"
你能指出我做错了什么吗?
编辑:
安德斯的回答确实帮助解决了问题。
我正在发布 "fixed" 食谱以防有人觉得它有用。
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 \
"
为了安全起见,删除所有不必要的行。
FILESEXTRAPATHS
没有必要;它仅在您编写 .bbappend
文件以修改另一层中的配方时使用。
ALLOW_EMPT_${PN}
也不需要。它用于允许 PN 为空,这仅在您创建其他包时才有用。在您的情况下,您需要 PN 中的固件文件,因此如果无法安装文件,最好在构建软件包时排除 bitbake 错误。
INSANE_SKIP_${PN} += "installed-vs-shipped"
也不需要。仅当您在 do_install
中安装您未放入包中的文件时才需要。通常,建议您不要安装它们或删除文件。
您的 do_install()
应该可以正常工作;尽管我建议使用 install
而不是 cp
和 chmod
。这样你也可以确保所有者和组是正确的。 (此检查已添加为 Jethro 中的新 QA 检查)。
PACKAGES = "${PN}"
不需要。
从您的 FILES_${PN}
定义中删除 ${D}
。 FILES
中的路径应该是目标上的路径(即不包括 D
目录)。
这应该会让你兴奋起来运行。
谢谢,很好的起点。我终于这样安装了两个.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
我将 "somename" 的引用添加到 local.conf:
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}。