【问题标题】:yocto: rebuild part of projectyocto:重建项目的一部分
【发布时间】:2016-07-26 22:54:38
【问题描述】:

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

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

MACHINE=some_machine nice bitbake yocto-etc-etc

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

【问题讨论】:

  • sstate-cache 将完成选择要重建和不重建的工作。所以需要很长时间。如果您想了解更多关于 devtool 的信息。转到 devday.yocto.link 以获取有关开发人员日培训的简报。
  • 你可以重建 gstreamer:bitbake -c clean && bitbake -c gstreamer 然后将它包含到你的图像中:bitbake -c clean yourImage && bitbake yourImage

标签: gstreamer yocto


【解决方案1】:

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

要删除温度:

bitbake -c clean gstreamer

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

bitbake -c cleansstate gstreamer

也删除下载,让我们从 do_fetch 和 all 开始构建

bitbake -c cleanall gstreamer

一旦你完成了这些适合你的干净,你可以简单地为指定的构建命令:

bitbake gstreamer

【讨论】:

  • 感谢您解释所有干净的类型。有时当我使用 cleanall 时,包无法构建。然后我还必须删除 temp/work/*/package 和 temp/stamps 中的包文件/*/package.. 只有这样它才能构建.. 不知道为什么(我手头没有错误).. 顺便说一句,你有错字 s/remote/remove/ ..
【解决方案2】:

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

MACHINE=some-machine bitbake gstreamer1.0

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

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

【讨论】:

  • 我还必须注意到最后我使用了MACHINE=xx bitbake -c package_write_ipk 然后复制包并使用ipkg install 安装 - 我不确定它是否真的有效,因为我搞砸了一些东西,但它看起来很聪明至少,我有一天会测试它。无论如何,感谢您提供有用的信息,这是正确完成的方式..它回答了我的问题如何构建一项任务..
  • 请注意,这是构建一个配方 - “任务”类似于 do_compile 或 do_package_write_ipk,即只是构建配方所需执行的多个部分之一。
【解决方案3】:

你也可以

clean:删除目标的所有输出文件 cleanall:根据更改删除目标的所有输出文件、共享状态缓存和下载的源文件

bitbake -c clean task 
bitbake -c cleanall task

【讨论】:

  • 我总是必须 rm -rf yocto/temp/stamps/target/module 和 temp/work 一样。这是这样做的吗?顺便说一句,它与我的问题有什么关系?我问了关于建设的问题.. 无论如何,感谢您提供有用的信息
  • 对不起,我忘了说你清理了我写的然后重新构建
【解决方案4】:

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

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

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

然后做一个包的cleansstate。

bitabake gstreamer** -c cleansstate

然后执行do_patch操作,检查我们的patch是否已经正确应用。

bitabake gstreamer*** -c patch

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

【讨论】:

    【解决方案5】:

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

    如果您只想应用补丁,您可以执行以下操作:

    # 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 2020-08-17
      • 2010-12-09
      • 2013-11-09
      • 2018-07-29
      • 2018-01-23
      • 2013-11-07
      相关资源
      最近更新 更多