Yocto do_package报错:文件已安装但未被任何包收录
Yocto构建Zebra Scanner闭源库配方的FILES变量问题
我在使用Yocto构建闭源Zebra Scanner库的配方时遇到了问题,目前bitbake已进入文件打包阶段,但始终提示文件未被纳入任何包。我已经将库文件打包成tar.bz2压缩包,参考官方文档配置了FILES变量,但问题依旧。
配方代码
SUMMARY = "zebraScanner Closed-source libraries for SDK" LICENSE = "CLOSED" SRC_URI = "file://zebrascanner_4.4.1-44_arm64.tar.bz2" do_install() { echo "WORKDIR ${WORKDIR}" echo "UNPACKDIR ${UNPACKDIR}" echo "PN ${PN}" echo "BP ${BP}" echo "S ${S}" echo "D ${D}" echo "Creating directory ${D}/etc/" install -d ${D}/etc echo "Creating directory ${D}/usr/lib/zebra-scanner/corescanner" install -d ${D}/usr/lib/zebra-scanner/corescanner echo "Creating directory ${D}/var" install -d ${D}/var # Copy over files cp -a ${UNPACKDIR}/zebrascanner_4.4.1-44_arm64/etc/. ${D}/etc cp -a ${UNPACKDIR}/zebrascanner_4.4.1-44_arm64/usr/. ${D}/usr cp -a ${UNPACKDIR}/zebrascanner_4.4.1-44_arm64/lib/. ${D}/usr/lib cp -a ${UNPACKDIR}/zebrascanner_4.4.1-44_arm64/var/. ${D}/var # Removing some unwanted files rm -r ${D}/usr/share/zebra-scanner/sbin rm -r ${D}/usr/share/zebra-scanner/samples install -d ${D}/usr/lib/zebra-scanner/corescanner cp -a ${UNPACKDIR}/zebrascanner_4.4.1-44_arm64/usr/lib/zebra-scanner/corescanner/. ${D}/usr/lib/zebra-scanner/corescanner } INSANE_SKIP:${PN} += "already-stripped" FILES_${PN} += " /etc/* /usr/lib/* /usr/* /var/* /usr/lib/zebra-scanner /usr/lib/zebra-scanner/* /usr/lib/zebra-scanner/corescanner/*" FILES_${PN} += " /usr/lib/zebra-scanner/javapos/* /usr/lib/zebra-scanner/javapos/jni/*" FILES_${PN}-dev += " /usr/share/zebra-scanner/*" FILES_${PN}-dev += " /usr/share/zebra-scanner/data/*"
已确认文件存在
在镜像目录中可以看到所有预期文件:
$ ls build-raspberrypi-armv8/tmp/work/cortexa53-poky-linux/zebrascanner/1.0/image/usr/lib/zebra-scanner/corescanner/ libcs-client.so libcs-clientscale.so.4.4.1 libcs-comm.so libcs-common.so.4.4.1 libcscl-hidkb.so libcscl-ibmhh.so.4.4.1 libcscl-snapi.so etc
错误信息
运行配方时出现如下QA错误:
ERROR: zebrascanner-1.0-r0 do_package: QA Issue: zebrascanner: Files/directories were installed but not shipped in any package: /usr/lib/zebra-scanner /usr/lib/zebra-scanner/corescanner /usr/lib/zebra-scanner/javapos /usr/lib/zebra-scanner/corescanner/libcs-comm.so /usr/lib/zebra-scanner/corescanner/libcs-clientscanner.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-ibmtt.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcs-clientscanner.so /usr/lib/zebra-scanner/corescanner/libcscl-hidkb.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-snapi.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-snapi.so /usr/lib/zebra-scanner/corescanner/libcs-client.so /usr/lib/zebra-scanner/corescanner/libcs-comm.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-ibmtt.so /usr/lib/zebra-scanner/corescanner/libcscl-ibmhh.so /usr/lib/zebra-scanner/corescanner/libcs-common.so.4.4.1 ... ...
尝试过的调整
- 在FILES_${PN}路径前添加${D},无效
- 逐个添加具体文件路径,无效
- 添加通配符匹配库文件:
FILES_${PN} += " /usr/lib/zebra-scanner/corescanner/*${SOLIBS}" FILES_${PN} += " /usr/lib/zebra-scanner/corescanner/lib*${SOLIBS}" FILES_${PN} += " /usr/lib/zebra-scanner/corescanner/lib*.so"
- 明确添加部分库文件:
FILES_${PN} += " /usr/lib/zebra-scanner/corescanner/libcs-comm.so" FILES_${PN} += " /usr/lib/zebra-scanner/corescanner/libcs-clientscanner.so.4.4.1"
最终FILES变量值
查看变量值确认配置已生效,但问题依旧:
FILES_SOLIBSDEV="/usr/lib/lib*.so /usr/lib/lib*.so" FILES_zebrascanner=" /usr/lib/zebra-scanner/corescanner/libcs-comm.so /usr/lib/zebra-scanner/corescanner/libcs-clientscanner.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-ibmtt.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcs-clientscanner.so /usr/lib/zebra-scanner/corescanner/libcscl-hidkb.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-snapi.so.4.4.1 /usr/lib/zebra-scanner/corescanner/libcscl-snapi.so /usr/lib/zebra-scanner/corescanner/*.so.* /usr/lib/zebra-scanner/corescanner/lib*.so.* /usr/lib/zebra-scanner/corescanner/lib*.so /etc/* /usr/lib/* /usr/* /var/* /usr/lib/zebra-scanner/* /usr/lib/zebra-scanner/* /usr/lib/zebra-scanner/corescanner/* /usr/lib/zebra-scanner/javapos/* /usr/lib/zebra-scanner/javapos/jni/*" FILES_zebrascanner-dev=" /usr/share/zebra-scanner/* /usr/share/zebra-scanner/data/*"
使用版本
- Yocto版本:5.1.2
$ cat ../sources/poky/meta-poky/conf/distro/poky.conf |grep DISTRO_VERSION DISTRO_VERSION = "5.1.2"
- BitBake版本:2.9.1
$ bitbake --version BitBake Build Tool Core version 2.9.1
解决办法
- 简化FILES配置,避免冲突
当前FILES配置存在重复路径,且/usr/*这类大范围路径可能和默认FILES规则冲突。直接重置FILES_${PN},只保留必要路径:
FILES_${PN} = "/etc/* /usr/lib/zebra-scanner/* /var/*" FILES_${PN}-dev = "/usr/share/zebra-scanner/*"
用=代替+=,彻底覆盖默认配置,避免继承规则干扰。
- 修复文件权限
闭源库文件权限可能不符合Yocto预期,导致打包工具识别异常。在do_install末尾添加权限修复:
do_install() { # ... 原有安装代码 ... # 修复库文件权限 chmod -R 755 ${D}/usr/lib/zebra-scanner chmod 644 ${D}/usr/lib/zebra-scanner/corescanner/*.so* }
- 临时跳过QA检查(仅排查用)
如果确认路径配置无误,只是QA检查误判,可临时跳过该检查:
INSANE_SKIP:${PN} += "installed-vs-shipped"
注意这只是临时方案,建议找到根本原因后移除。
- 确认SOLIBS变量值
Yocto中SOLIBS定义了共享库后缀,不同版本可能有差异,运行以下命令查看实际值:
bitbake -e zebrascanner | grep SOLIBS
确保通配符匹配规则和实际后缀一致。
- 开启调试日志定位问题
打开FILES_DEBUG,让Yocto输出文件匹配的详细过程:
FILES_DEBUG = "1"
重新执行打包步骤:
bitbake zebrascanner -c package
从日志中可查看每个文件的匹配状态,准确定位未被匹配的文件。
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

