我有一个项目使用yocto来构建包括gstreamer在内的库。我发现我需要修补一些gstreamer元素,从而用补丁创建新的bitbake配方..
我通常必须使用图像名称作为参数运行bitbake,它将重建整个yocto(这很长):
MACHINE=some_machine nice bitbake yocto-etc-etc
如何重建我需要的部分而不是整个yocto? 我听说过devtool,但我不确定如何使用它。
答案 0 :(得分:4)
当然,这很容易做到。只需指定您要构建的配方而不是图像名称,例如,如果它是您更改的主要gstreamer配方(至少在当前版本中称为gstreamer1.0):
MACHINE=some-machine bitbake gstreamer1.0
请注意,命令行中预期的名称始终是配方名称或配方中PROVIDES的名称,而不是运行时包名称。
关于devtool,它当然可以让你进入一个环境,你可以更容易地更改配方的源代码并从中生成补丁,但我们在这里讨论的实际构建部分并没有真正改变。您可以在Yocto Project Development Manual
中找到有关如何使用devtool的更多信息答案 1 :(得分:4)
您可以根据需要将不同的命令传递给bitbake。
删除temp:
bitbake -c clean gstreamer
删除temp和sstate缓存(我最常使用):
bitbake -c cleansstate gstreamer
要删除下载,让我们从do_fetch和所有
开始构建bitbake -c cleanall gstreamer
一旦你完成了任何适合你的干净,你可以简单地给出指定的构建命令:
bitbake gstreamer
答案 2 :(得分:1)
你也可以
clean:删除目标的所有输出文件 cleanall:删除目标的所有输出文件,共享状态缓存和下载的源文件,具体取决于更改
bitbake -c clean task
bitbake -c cleanall task
答案 3 :(得分:0)
您还可以启动您感兴趣的任务,例如:
如果只想应用补丁,则可以执行以下操作:
# 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)),对其进行测试并重复进行,直到您喜欢resul,然后执行以下操作重新生成图像:
for i in clean cleanall cleansstate;do bitbake -c ${i} gstreamer;done
MACHINE=some_machine nice bitbake yocto-etc-etc
答案 4 :(得分:0)
首先,您可以使用被子或diff等在gstreamer上创建补丁。
将补丁放入您的元层,并将其包含在SRC_URI += "file://xxxx.patch".
确保已在配方的bbappend文件中添加了FILESEXTRAPATHS_PREPEND变量。
然后对软件包进行清理。
bitabake gstreamer** -c cleansstate
然后执行do_patch操作并检查我们的补丁是否正确应用。
bitabake gstreamer*** -c patch
然后完整构建组件,然后构建最终目标。