如何将文件添加到构建根文件系统?

How do I add a file to the build root filesystem?

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

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

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

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

bitbake -c listtasks <your package name>

其实这样你只需要调用包的任务do_listtasksdo_listtasks也是...一个任务)

所以..首先您需要了解您需要将文件附加到什么任务。任务的名称非常简单,因此要在编译期间使用您的文件,您需要任务 do_compile,依此类推。

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

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

通过这样做,您告诉 bitbake 将此文件附加到 WORKDIR during do_unpack task. More on this here, especially in 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 is some folder under Yocto build directory, where all your package stuff, needed for build your package, is placed, 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
}

好吧...这更像是一个概述,而不是一个确切的答案,但希望这对您有所帮助!