使用 FILES_${PN} 的示例

An example of using FILES_${PN}

即使阅读了手册,我仍然无法理解 FILES_${PN}。例如,我正在研究 this example 制作启动脚本。在我写了类似的东西之后,我得到了这些错误信息。

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} += " with all directory paths " 我安装的配方文件,然后它工作正常。

那么,你能解释一下为什么我需要这样做吗?什么时候?如果提供连贯的示例将会有所帮助。

一个配方可以(而且通常确实)生产多个包装。该系统并非完全愚蠢,因此例如所有 headers 将自动进入 -dev 包并且所有文档进入 -doc,但通常食谱编写者需要决定哪个特定文件所属的包。这是通过 FILES_<packagename> += "/path/to/file" 格式完成的。

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

在您的情况下,您的项目构建系统似乎创建了一些目录但没有在其中放置任何内容?如果是这种情况,您可以选择修改构建系统以不这样做,或者添加一个 do_install_append() 函数在安装后删除空目录。

通常 <package name> 已经在 Yocto 中用 ${PN} 变量定义,因此文件分配会很简单。如果您想添加整个子树,星号 * 也可以正常工作。也许考虑使用一些预定义的变量来确定将你的东西存放在最终图像树上的位置:

FILES_${PN} += "${nonarch_base_libdir}/<your package folder>/*"