yocto:重建项目的一部分

yocto: rebuild part of project

我有一个项目正在使用 yocto 构建库,包括 gstreamer。我发现我需要修补一些 gstreamer 元素,从而用补丁创建新的 bitbake 配方。

我通常必须 运行 以图像名称作为参数进行 bitbake,这将重建整个 yocto(相当长):

MACHINE=some_machine nice bitbake yocto-etc-etc

如何只重建我需要的部分而不是整个 yocto? 我听说过 devtool,但我不确定如何使用它。

当然,这很容易做到。只需指定您要构建的配方而不是图像名称,例如,如果它是您更改的主要 gstreamer 配方(至少在当前版本中称为 gstreamer1.0):

MACHINE=some-machine bitbake gstreamer1.0

请注意,命令行中预期的名称始终是配方名称或配方中 PROVIDES 的名称,而不是运行时包名称。

关于 devtool,它当然可以让您进入一个环境,您可以更轻松地更改配方的源代码并从中生成补丁,但我们在这里讨论的实际构建部分并没有真正改变。您可以在 Yocto Project Development Manual

中找到有关如何使用 devtool 的更多信息

你也可以

clean:删除目标的所有输出文件 cleanall:删除目标的所有输出文件、共享状态缓存和下载的源文件,具体取决于更改

bitbake -c clean task 
bitbake -c cleanall task

您可以根据需要向 bitbake 传递不同的命令。

删除温度:

bitbake -c clean gstreamer

删除 temp 和 sstate 缓存(我用得最多):

bitbake -c cleansstate gstreamer

同时删除下载,让我们从 do_fetch 和所有

开始构建
bitbake -c cleanall gstreamer

一旦你完成了这些清理中的任何一个,你可以简单地给出指定的构建命令:

bitbake gstreamer

您也可以启动您感兴趣的任务,例如:

如果你只想应用补丁,你可以这样做:

# Apply the patch you have located and sourced in SRC_URI variable previously
MACHINE=some_machine nice bitbake -c patch gstreamer
# Compile the recipe 
MACHINE=some_machine nice bitbake -c compile gstreamer

# In case there are more necessary tasks, launch them as previous

现在您可以获得生成的包,并将其传递到您的开发板(例如通过 ssh/serial(zmodem) ),对其进行测试并重复直到您喜欢结果,然后重新生成图像:

for i in clean cleanall cleansstate;do bitbake -c ${i} gstreamer;done
MACHINE=some_machine nice bitbake yocto-etc-etc

首先,您可以使用 quilt 或 diff 等在 gstreamer 上创建补丁...

将补丁放入元层并将其包含到SRC_URI += "file://xxxx.patch".

确保您已经在配方的 bbappend 文件中添加了 FILESEXTRAPATHS_PREPEND 变量。

然后对包进行清理。

bitabake gstreamer** -c cleansstate

然后执行do_patch操作并检查我们的补丁是否已正确应用。

bitabake gstreamer*** -c patch

然后进行组件的完整构建,然后构建最终目标。