在BitBake中的任务do_patch()期间失败

时间:2016-05-19 11:54:10

标签: embedded-linux yocto bitbake

我正在使用yocto。它不支持基于ft5x06s的触摸屏,因此我决定添加一个补丁。但是当我添加补丁文件时,我收到了以下错误:

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'

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

问题与 BitBake 执行的任务do_patch()有关,在Yocto中,任务调度程序和执行程序。 阅读BitBake User Manual

中的更多内容

但是,您所面临的错误并非由Yocto组件引起。 错误消息表明您的补丁无法应用于所需文件,因为它无效。

通常,.patch按照差异工具生成的名为hunks的部分排序。

单个大块的示例(来自Diff Utility article @ wiki

@@ -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文章中,您可以阅读如何解释这样的大块,但是要简短:与-对齐意味着特定的修补程序将删除它,与+一致的行将被添加补丁。没有任何标记的线被放置以供参考(上下文)并且将保持不变。

现在,在您的错误消息中写道:

  28个帅哥中有5个失败 - 在文件驱动程序/输入/触摸屏/ edt-ft5x06.c中拒绝   补丁0026-imx6q-smx6-edt-ft5x06.patch不适用(使用-f强制执行)

如上所示,您的补丁包含28个帅哥,其中5个因为无效而无法应用 - 补丁工具无法应用这些更改,因为相应的行与您用作的文件不同参考

还可以看到您的补丁编号为0026,因此可能的失败原因是在您更改文件结构之前应用的其他补丁:确保作为参考使用源并应用所有现有补丁

我假设您使用*.bbappend*.bb文件通过附加SRC_URI变量来添加补丁。应用修补程序的顺序与列出的文件的顺序相同。因此,如果您的补丁是最新补丁,它应该是:

SRC_URI += "file://0001-<patch_name>.patch \
            file://0002-<patch_name>.patch \
            (...)
            file://0026-imx6q-smx6-edt-ft5x06.patch \
           "

最后一句话:如果您使用Yocto发布&gt; = 1.8,就会有一个名为devtoolYocto Mega Manual: devtool)的便捷功能,它可以简化许多临时源的使用。

修改 评论提问:

  

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

仅仅因为您的补丁可以应用,因为它不适合目标源。 对于特定配方,执行一组任务,请参阅:BitBake manual: Execution chapter。您可以通过传递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>

  8. 请注意:<recipe_name>应在没有.bb扩展名的情况下通过。