Yocto:重建项目的部分内容

14

我有一个项目,使用yocto进行库的构建,包括gstreamer。我发现需要修补一些gstreamer元素,因此创建了新的bitbake配方并进行了修补。

通常我必须以镜像名称作为参数运行bitbake,这将重新构建整个yocto(这需要相当长的时间):

MACHINE=some_machine nice bitbake yocto-etc-etc

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


sstate-cache会负责选择哪些需要重建,哪些不需要。因此这可能需要一些时间。如果您想了解有关devtool的更多信息,请访问devday.yocto.link获取有关开发者日培训的幻灯片。 - Charles C.
您可以重新构建gstreamer: bitbake -c clean && bitbake -c gstreamer 然后将其包含到您的镜像中:bitbake -c clean yourImage && bitbake yourImage - Ziegfried
7个回答

25

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

要删除临时文件:

bitbake -c clean gstreamer

清除临时和 sstate 缓存(我最常使用的方法):

bitbake -c cleansstate gstreamer

要同时删除下载,并从do_fetch开始构建所有内容。

bitbake -c cleanall gstreamer

在完成这两种清理中的任何一种后,您可以简单地为指定的内容提供构建命令。

bitbake gstreamer

1
感谢您解释了所有的清理类型。有时当我使用cleanall时,软件包无法构建。然后我必须删除temp/work//package和temp/stamps//package中的软件包文件。只有这样才能构建成功。不确定原因(我手头没有错误信息)...顺便说一下,您有一个错别字s/remote/remove/.. - nayana

8
当然,这很容易做到。只需指定你想构建的配方而不是图像名称,例如如果你改变了主要的gstreamer配方(至少在当前版本中称为gstreamer1.0):
MACHINE=some-machine bitbake gstreamer1.0

请注意,命令行中预期的名称始终是配方名称或来自配方中提供的内容,而不是运行时包名称。
关于devtool,它肯定可以将您置于一个环境中,在那里您可以更轻松地对配方的源代码进行更改并从中生成补丁,但我们在此讨论的实际构建部分并没有真正改变。您可以在 Yocto项目开发手册中找到有关如何使用devtool的更多信息。

另外我必须注意,最后我使用了 MACHINE=xx bitbake -c package_write_ipk,然后复制软件包并使用 ipkg install 进行安装 - 好吧,我不确定它是否真正起作用,因为我弄错了一些东西,但至少看起来很聪明,我将在某个时候进行测试。无论如何,感谢有用的信息,这就是正确的操作方式.. 它回答了我的问题,如何构建一个任务.. - nayana
请注意,这是构建一个配方 - "任务"是类似于do_compile或do_package_write_ipk的东西,即需要执行的构建配方的许多部分之一。 - bluelightning

4
你可以使用以下命令:
clean:删除目标的所有输出文件。 cleanall:根据更改删除目标的所有输出文件、共享状态缓存和已下载的源文件。
bitbake -c clean task 
bitbake -c cleanall task

我总是不得不执行rm -rf yocto/temp/stamps/target/module,以及temp/work的相同操作。这样做有什么作用?顺便问一下,这与我的问题有什么关系?我问的是关于构建的问题。无论如何,感谢您提供有用的信息。 - nayana
抱歉,我忘了提醒你清理我写的代码并重新构建。 - David Bensoussan

3

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

将补丁放入您的meta层并包含它,SRC_URI += "file://xxxx.patch"。

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

然后对包进行cleansstate操作。

bitabake gstreamer** -c cleansstate

然后执行do_patch操作并检查我们的补丁是否已经正确应用。
bitabake gstreamer*** -c patch

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


1
你也可以启动你感兴趣的任务,例如:
如果你只想应用补丁,你可以这样做:
# 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/串口(zmodem)),测试并重复此过程直到您满意为止,然后执行以下操作重新生成镜像:
for i in clean cleanall cleansstate;do bitbake -c ${i} gstreamer;done
MACHINE=some_machine nice bitbake yocto-etc-etc

0
你可以在文件根目录**/build/conf/local.conf**中保存机器名称: MACHINE = "some_machine"
然后从根目录执行: source ./oe-init-build-env
这将将您重定向到buid/目录 然后(从构建目录中)执行: bitbake gstreamer

0

通过提供配方名称和 bitbake 命令,您可以构建任何特定的配方。

例如,如果您想要构建 gstreamer。

poky/meta/recipes-multimedia/gstreamer1.0_1.16.3.bb

您可以使用以下命令

MACHINE=<your-machine-name> bitbake gstreamer1.0

请注意,PROVIDES值将从.bb文件名中解析,不包括下划线后面的字符。 其他建议 如果您想在源代码中进行一些实验性更改,并希望为每个最小化的更改进行编译,可以通过导航到工作目录来实现。
cd build/tmp/work/armv5e-poky-linux-gnueabi/gstreamer1.0/1.16.3-r0/

在这里,您可以在src目录中应用更改,并使用./temp/run.do_compile进行编译,与整个构建时间相比,这将需要非常少的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接