我创建了一个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 \
"
答案 0 :(得分:10)
删除所有不必要的行,只是为了安全起见。
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}"
不需要。
从${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}。