首页 > 解决方案 > 如何将文件添加到构建根文件系统?

问题描述

我在构建包时需要包含一个文件,但在运行时根本不需要文件本身。

我被告知要查看如何使用do_函数来执行此操作,但无法在任何文档中找到合适的函数。我认为这可以很简单地完成,但只需指定要添加的文件。

同样,我不是在寻找将文件添加到最终图像的方法。这只是为了建造。

标签: bitbake

解决方案


这是有关任务的完整文档。它们都以 开头do_,因此建议您扩展其中一个。此外(如文档中所写)包可能具有来自 classes - files 的其他任务,这些任务通过关键字.bbclass应用于您的包的配方。inherit要获得您的包任务的完整列表,请使用命令

bitbake -c listtasks <your package name>

实际上这种方式你只是调用do_listtasks你的包的任务,do_listtasks也是......一个任务)

所以.. 首先,您需要了解附加文件所需的任务。任务的名称非常简单,因此要在编译期间使用您的文件,您需要 taskdo_compile等等。

现在,尚不清楚您将如何实际将文件添加到构建中,但看起来也以某种方式通过您的包的配方。这意味着您应该将文件放在files配方旁边的文件夹中(有关于此文件夹命名的选项),而不是SRC_URI像这样将文件添加到变量中:

SRC_URI = " \
.....
file://your-file-in-folder-files.ext \
.....
"

通过这样做,您告诉 bitbake 在任务期间将此文件附加到WORKDIR 。do_unpack更多关于这方面内容,尤其是在3.3.5中。

现在来回答你的问题))假设你需要在do_compile任务期间使用你的文件,但实际编译操作之前。比在你的食谱中扩展 do_compile 像这样

do_compile_prepend() {
  cp ${WORKDIR}/your-file-in-folder-files.ext ${S}/some/subpath/inside/sources
}

类似地,在一些实际任务操作之后对您的文件执行某些操作,请创建带_append后缀的函数。例如,do_configure_appenddo_compile_append

这里WORKDIR是 Yoctobuild目录下的某个文件夹,其中放置了构建包所需的所有包内容,S是一个特殊文件夹,其中包含下载和解压缩的源代码,WORKDIR并且do_compile_prepend(和其他)只是一个 bash 脚本。

还要考虑文件夹D(它也位于 下WORKDIR)。它包含文件,实际上应该在图像创建期间进入结果图像。因此,如果您的文件以某种方式找到了生成图像的方法,请直接将其删除,D如下所示:

do_install_append() {
  rm -f ${D}/path/to/your/file/in/resulting/rootfs/your-file-in-folder-files.ext
}

嗯......这是更多的概述,而不是一个确切的答案,但希望这会有所帮助!


推荐阅读