devtool使用介绍(2)

240 篇文章 11 订阅
30 篇文章 3 订阅

2.4.2 使用devtool Modify修改现有组件的来源

devtool Modify命令为使用已有代码的现有代码作准备,该代码已具有用于构建软件的本地recipe。 该命令足够灵活,可让你从上游源提取代码,指定现有recipe,并跟踪并收集与该代码关联的其他开发人员的任何补丁文件。
根据你的特定方案,与devtool一起使用的参数和选项会修改为不同的组合。 下图显示了devtool Modify命令的常见开发流程:
在这里插入图片描述

  1. 准备修改代码:该流程的顶部显示了三种方案,你可以通过它们使用devtool Modify来准备对源文件进行处理。每个方案都假定以下条件:
  • recipe存在于本地devtool工作空间外部的一层中。

  • 源文件以未提取状态存在于上游,或者以先前提取的状态存在于本地。
    典型的情况是,另一个开发人员创建了一个与Yocto Project一起使用的层,而他们的recipe已经驻留在该层中。 此外,它们的源代码可以在上游或本地轻松获得。

  • Left:图中的左场景代表一种常见情况,其中源代码在本地不存在,需要从上游源中提取。在这种情况下,源被提取到默认的devtool工作区位置。 在这种情况下,recipe位于工作空间之外的其自己的层中(即,meta-layername)。
    以下命令标识recipe,并且默认情况下提取源文件:

$ devtool modify recipe

一旦devtool找到了recipe,devtool将使用recipe的SRC_URI语句来定位源代码和其他开发人员提供的任何本地补丁文件。
在这种情况下,不存在srctree参数。 因此,devtool Modify命令的默认行为是将SRC_URI语句指向的源文件提取到本地Git结构中。 此外,提取的源的位置是devtool工作空间中的默认区域。 结果是,当recipe保留在其原始位置时,该命令将在工作空间内设置源代码和附加文件。

另外,如果你有任何非修补程序本地文件(即,在SRC_URI语句中用file://条目引用的文件,但* .patch /或* .diff除外),这些文件将被复制到“本地”目录下的oe-local-files文件夹中。新创建的源树。 将文件复制到此处为你提供了一个方便的区域,你可以从中修改文件。 下次你构建软件时,对这些文件所做的任何更改或添加都将合并到版本中,就像你可能对源所做的其他更改一样。

  • Left:图中中间部分的情况表示源代码在本地不存在的情况。在这种情况下,代码再次位于上游,需要作为Git存储库提取到某些本地区域。注意recipe仍然是本地的,并且位于工作空间之外的其自己的层中。
    以下命令告诉devtool使用的方法,在这种情况下,为默认devtool工作空间之外存在的提取源文件标识本地区域:
$ devtool modify recipe srctree
注意
你不能使用devtool命令为srctree提供URL。

与所有提取一样,该命令使用recipe的SRC_URI语句查找源文件和任何关联的补丁文件。 非补丁文件将复制到新创建的源树下的oe-local-files文件夹中。找到文件后,默认情况下,该命令会将其提取到srctree中。
在工作空间中,devtool为recipe创建一个附加文件。 recipe保留在其原始位置,但是源文件被提取到你通过srctree提供的位置。

  • Right:图中右侧场景代表了一种情况,其中源树(srctree)作为本地先前在devtool工作区之外提取的Git结构已经存在于本地。 在此示例中,该recipe还存在于其自身层中本地的其他位置。
    以下命令告诉devtool使用的recipe,使用“ -n”选项指示不需要提取源,并使用srctree指向先前提取的源文件:
$ devtool modify -n recipe srctree

如果oe-local-files子目录恰好存在并且包含非补丁文件,则使用这些文件。 但是,如果子目录不存在,并且你运行devtool finish命令,那么该食谱旁边可能存在的所有非补丁文件都将被删除,因为它似乎在devtool中已经删除了这些文件。
一旦devtool Modify命令完成,它只会在devtool工作区中为recipe创建一个附加文件。recipe和源代码保留在其原始位置

  1. 编辑源代码:使用devtool Modify命令后,你可以自由更改源文件。你可以使用任何喜欢的编辑器进行并保存源代码修改。

3.构建recipe或重建图像:下一步主要取决于对新代码的处理方式。
如果最终需要将构建输出移至目标硬件,请使用以下devtool命令:

$ devtool build recipe

另一方面,如果你希望映像包含来自工作区的recipe软件包以立即部署到设备上(例如,出于测试目的),则可以使用devtool build-image命令:$ devtool build-image image

  1. 部署构建输出:使用devtool build命令扩展recipe时,你可能希望查看生成的构建输出是否在目标硬件上按预期工作。
注意
此步骤假定你具有一个先前构建的映像,该映像已经在QEMU中运行或在实际硬件上运行。 另外,假设为了将映像部署到目标,在映像中安装了SSH,并且如果映像在可以从开发计算机进行网络访问的真实硬件上运行。

你可以使用devtool deploy-target命令将构建输出部署到该目标硬件:

$ devtool deploy-target recipe target

目标是作为SSH服务器运行的实时目标计算机。当然,你可以使用其他方法将使用devtool build-image命令构建的映像部署到实际硬件。devtool没有提供将映像部署到实际硬件的特定命令。

  1. 使用recipe完成工作:devtool finish命令会在本地Git存储库中创建与提交对应的所有补丁,更新recipe以指向它们(或创建一个.bbappend文件来这样做,具体取决于指定的目标层),然后重置recipe,以便recipe是正常构建的,而不是从工作空间构建的。
$ devtool finish recipe layer
注意
在使用devtool finish命令之前,必须在本地Git存储库中暂存并提交要转换为补丁程序的任何更改。

由于无需移动recipe,因此devtool finish可以在原始层中更新原始recipe,也可以在该命令所提供的不同层中创建一个.bbappend文件。 在devtool finish命令期间,你在oe-local-files目录中所做的任何工作都会保留在recipe旁边的原始文件中。
作为devtool finish命令的最后过程,将还原标准层和上游源的状态,以便你可以从这些区域而不是从工作区构建recipe。

注:如果你决定不想继续进行工作,则可以使用devtool reset命令将内容放回原处。如果确定使用此命令,请记得保留源码树。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值