使用FILES_${PN}的示例

19

我阅读了手册,但仍然无法理解FILES_${PN}的含义。例如,我正在处理这个示例中制作启动脚本的问题。当我写了类似以下内容后,出现了以下错误信息。

ERROR: initscriptd-1.0-r0 do_package: QA Issue: initscriptd: Files/directories were installed but not shipped in any package:
  /usr
  /usr/sbin
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
initscriptd: 2 installed and not shipped files. [installed-vs-shipped]
ERROR: initscriptd-1.0-r0 do_package: Fatal QA errors found, failing task.
ERROR: initscriptd-1.0-r0 do_package: Function failed: do_package
ERROR: Logfile of failure stored in: /home/yahia/Desktop/elinux_dev/bake_factory/poky-pyro-17.0.1/build/tmp/work/core2-64-poky-linux/initscriptd/1.0-r0/temp/log.do_package.5252
ERROR: Task (/home/yahia/Desktop/elinux_dev/bake_factory/poky-pyro-17.0.1/meta-mylayer/recipes-core/mylayer-initscript/initscriptd.bb:do_package) failed with exit code '1'

根据我的理解,我提供的配方文件并没有被打包在某个特定的软件包中,所以Yocto不知道该在哪里解压它们,我的理解正确吗?

因此,我添加了FILES_${PN} += "带有所有目录路径",这样我安装配方文件时就可以正常工作。

那么,请问我为什么需要这样做?何时需要?如果提供一个相关的例子将会更加有帮助。

2个回答

28

一个配方可以(通常也确实)生成多个软件包。系统并不傻,举个例子,所有的头文件会自动放到-dev软件包中,而所有文档则会放到-doc中,但通常情况下,配方编写者需要决定一个特定文件属于哪个软件包。使用FILES_<packagename> += "/path/to/file"格式完成这个过程。

FILES_* 的默认值可以在 meta/conf/bitbake.conf 中找到,但请注意,你的配方继承的类也可能会修改这些值:使用bitbake -e <recipe>|grep ^FILES_检查最终的值。

在你的情况下,看起来你的项目构建系统创建了一些空目录,但没有在其中放任何东西?如果是这样,你可以修改你的构建系统以避免这种情况或添加一个do_install_append()函数,在安装后删除空目录。


2
通常情况下,Yocto中已经使用了${PN}变量定义<package name>,因此文件分配将变得简单。如果您想添加整个子树,那么星号*也可以很好地工作。并且考虑在最终镜像树上使用一些预定义的变量来确定存储您的内容的位置:FILES_${PN} += "${nonarch_base_libdir}/<your package folder>/*"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接