You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

解决办法

  1. 简化FILES配置,避免冲突
    当前FILES配置存在重复路径,且/usr/*这类大范围路径可能和默认FILES规则冲突。直接重置FILES_${PN},只保留必要路径:
FILES_${PN} = "/etc/* /usr/lib/zebra-scanner/* /var/*"
FILES_${PN}-dev = "/usr/share/zebra-scanner/*"

用=代替+=,彻底覆盖默认配置,避免继承规则干扰。

  1. 修复文件权限
    闭源库文件权限可能不符合Yocto预期,导致打包工具识别异常。在do_install末尾添加权限修复:
do_install() {
    # ... 原有安装代码 ...
    # 修复库文件权限
    chmod -R 755 ${D}/usr/lib/zebra-scanner
    chmod 644 ${D}/usr/lib/zebra-scanner/corescanner/*.so*
}
  1. 临时跳过QA检查(仅排查用)
    如果确认路径配置无误,只是QA检查误判,可临时跳过该检查:
INSANE_SKIP:${PN} += "installed-vs-shipped"

注意这只是临时方案,建议找到根本原因后移除。

  1. 确认SOLIBS变量值
    Yocto中SOLIBS定义了共享库后缀,不同版本可能有差异,运行以下命令查看实际值:
bitbake -e zebrascanner | grep SOLIBS

确保通配符匹配规则和实际后缀一致。

  1. 开启调试日志定位问题
    打开FILES_DEBUG,让Yocto输出文件匹配的详细过程:
FILES_DEBUG = "1"

重新执行打包步骤:

bitbake zebrascanner -c package

从日志中可查看每个文件的匹配状态,准确定位未被匹配的文件。


内容的提问来源于stack exchange,提问作者Tommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:52:03