首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务do_patch()在BitBake中失败

任务do_patch()在BitBake中失败
EN

Stack Overflow用户
提问于 2016-05-19 11:54:10
回答 1查看 8K关注 0票数 3

我在用yocto。它不支持ft5x06sbased触摸屏,所以我决定添加一个补丁。但是,当我添加修补程序文件时,我得到了以下错误:

代码语言:javascript
复制
ERROR: Command Error: exit status: 1  Output:
Applying patch 0026-imx6q-smx6-edt-ft5x06.patch
patching file Documentation/devicetree/bindings/input/touchscreen/edt-ft5x06.txt
patching file drivers/input/touchscreen/edt-ft5x06.c
Hunk #22 FAILED at 751.
Hunk #23 succeeded at 811 (offset -1 lines).
Hunk #24 FAILED at 922.
Hunk #25 FAILED at 959.
Hunk #26 FAILED at 995.
Hunk #27 FAILED at 1009.
Hunk #28 succeeded at 1077 (offset 17 lines).
5 out of 28 hunks FAILED -- rejects in file drivers/input/touchscreen/edt-ft5x06.c
Patch 0026-imx6q-smx6-edt-ft5x06.patch does not apply (enforce with -f)
ERROR: Function failed: patch_do_patch
ERROR: Logfile of failure stored in: /home/safedrive/test/build/tmp/work/smarc_samx6i-poky-linux-gnueabi/linux-smx6/3.10.17-r0/temp/log.do_patch.29885
ERROR: Task 70 (/home/safedrive/test/sources/meta-fsl-arm-extra/recipes-kernel/linux/linux-smx6_3.10.17.bb, do_patch) failed with exit code '1'

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2016-05-19 15:57:49

该问题与BitBake执行的任务调度有关,在Yocto中是任务调度器和执行器。在BitBake用户手册中阅读更多内容

但是您所面临的错误并不是由Yocto组件造成的。错误消息指出,您的修补程序无法应用于所需的文件,因为它是无效的。

通常,.patch是通过diff工具生成的,称为hunks

单个主机的示例(来自Diff实用文章@ wiki)

代码语言:javascript
复制
@@ -5,16 +11,10 @@
be shown if it doesn't
change.  Otherwise, that
would not be helping to
-compress the size of the
-changes.
-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
+compress anything.

在wiki的文章中,您可以了解如何解释这样的问题,但是将其简化:使用-行意味着特定的修补程序将删除它,与+的行将由补丁添加。没有任何标记的行被放置以供参考(上下文),并将保持不变。

现在,在您的错误消息中写入了以下内容:

文件驱动程序/输入/触摸屏/edt-ft5x06.c修补程序0026-imx6q-smx6-edt ft5x06不适用修补程序(-f强制执行)

这意味着您的修补程序包含上面所示的28个块,其中5个不能应用,因为它们是无效的--补丁工具无法应用这些更改,因为相应的行与您作为引用的文件中的行不同。

还可以看到,您的修补程序编号为0026,因此失败的可能原因是在您的修补程序之前应用的其他修补程序更改了文件结构:确保您使用的是源代码,并应用了所有现有的修补程序。

我假设您通过追加*.bbappend变量或*.bb文件来添加修补程序。应用修补程序的顺序与列表文件的顺序相同。因此,如果您的修补程序是最新的,它应该看起来像:

代码语言:javascript
复制
SRC_URI += "file://0001-<patch_name>.patch \
            file://0002-<patch_name>.patch \
            (...)
            file://0026-imx6q-smx6-edt-ft5x06.patch \
           "

最后一点是:如果您使用Yocto发布的>= 1.8,有一个很方便的东西叫做devtool (Yocto Mega手册: devtool),它大大简化了临时源的工作。

编辑:评论中的问题:

是的,我想知道为什么bitbake会返回这条错误消息

仅仅因为您的修补程序可以应用,因为它不适合目标源。有关执行一组任务的特定配方,请参见:BitBake手册:执行章节。您可以通过传递:bitbake -c listtasks -f <recipe_name>列出任务。do_patch()是常见的任务之一,它由于补丁错误而失败。

试试这个:

  1. SRC_URI中删除修补程序。
  2. 执行:bitbake -c cleanall -f <recipe_name>
  3. 执行:bitbake -c build -f <recipe_name>
  4. 找到包含需要修补的源代码的目录:bitbake -e <your_recipe_name> | grep ^S=,然后转到那里。
  5. 复制您需要修补的文件/文件。在您需要的地方添加您的更改。通过diff工具创建新的修补程序。作为参考,使用原始文件/文件,以及修改后的文件(如:diff --ruN original_src modified_src > 0026-patch-name.patch )。
  6. 将修补程序移动到适当的目录,并将其添加到SRC_URI
  7. 重建目标配方:bitbake -c cleanall -f <recipe_name> && bitbake -c build -f <recipe_name>

请注意:<recipe_name>应该在没有.bb扩展的情况下传递。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37322435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档