自定义Yocto Recipe未在.bin镜像中生成指定文件夹问题排查
在自定义meta文件夹的不同目录下创建了2个.bb文件,可通过bitbake正常编译,但生成的.bin镜像中找不到指定的/opt/twin-scripts文件夹。多次构建镜像后执行find / -name "twin-scripts"无任何结果,查看编译日志及编译后的临时镜像时该文件夹存在,但最终.bin镜像中缺失。
相关Recipe代码
SRCREV_FORMAT = "twin_ditto" S = "${WORKDIR}/twin-process" DEPENDS = "python3 python3-requests python3-psutil python3-setuptools" do_compile() { : } do_install() { install -d ${D}/opt/twin-scripts/ echo "#!/bin/sh" > ${D}/opt/twin-scripts/automate-twin-docker-setup echo "docker pull eclipse-mosquitto" >> ${D}/opt/twin-scripts/automate-twin-docker-setup echo "cd ${S}/iwatch/dockerfile && docker build --no-cache -t iwatch_image -f Dockerfile.iwatch ." >> ${D}/opt/twin-scripts/automate-twin-docker-setup chmod +x ${D}/opt/twin-scripts/automate-twin-docker-setup } FILES:${PN} = "${bindir}/* ${sysconfdir}/init.d/* /opt/twin-scripts/*"
确认Recipe已被加入镜像构建
单独编译成功不代表镜像会自动包含该包。打开你的镜像Recipe(如core-image-*.bb),添加IMAGE_INSTALL:append = " your-recipe-name",替换your-recipe-name为你的.bb文件对应的包名(PN)。调整FILES变量配置
当前FILES:${PN}仅指定了目录下的文件,尝试显式包含目录本身:FILES:${PN} = "${bindir}/* ${sysconfdir}/init.d/* /opt/twin-scripts /opt/twin-scripts/*"确保打包时同时包含目录及其中的文件。
检查镜像裁剪机制
若镜像启用了ROOTFS_POSTPROCESS_COMMAND或使用了包裁剪工具,可能会移除未被依赖的内容。检查IMAGE_FEATURES和ROOTFS_POSTPROCESS_COMMAND的配置,确认没有触发不必要的裁剪逻辑。排查多Recipe冲突
两个.bb文件若存在PN重名,或其中一个覆盖了另一个的安装内容,会导致文件缺失。检查两个.bb的PN变量,确保名称唯一,且没有相互覆盖的操作。验证包内内容
执行bitbake your-recipe-name单独构建,然后查看生成的包文件(如.ipk/.rpm),确认其中包含/opt/twin-scripts目录和脚本。若包本身正常,再确认镜像构建时是否正确引入了该包。
内容的提问来源于stack exchange,提问作者Coder101

