我正在使用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'
我该如何解决?
最佳答案
问题与 BitBake 执行的任务do_patch()
有关,后者在Yocto中是任务调度程序和执行程序。
在BitBake User Manual中阅读更多内容
但是您面临的错误不是Yocto组件引起的。
错误消息指出您的补丁程序无法应用到所需文件,因为它无效。
通常,.patch
是通过diff工具生成的称为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版本> = 1.8,则有一个方便的叫做
devtool
(Yocto Mega Manual: devtool)的东西,它大大简化了使用临时源的工作。编辑:
来自评论的问题:
是的,我想知道为什么bitbake返回此错误消息
仅仅是因为您的补丁不适合目标源而可以应用。
有关特定配方的一组任务,请参见:BitBake manual: Execution chapter。您可以通过传递列出任务:
bitbake -c listtasks -f <recipe_name>
。 do_patch()
是常见任务之一,由于补丁错误而失败。试试这个:
SRC_URI
中删除您的补丁。 bitbake -c cleanall -f <recipe_name>
bitbake -c build -f <recipe_name>
bitbake -e <your_recipe_name> | grep ^S=
并转到那里。 diff
工具创建新补丁。作为参考,请使用一个或多个原始文件,并通过修改将其更改为一个或多个文件,例如:diff --ruN original_src modified_src > 0026-patch-name.patch
。 SRC_URI
中。 bitbake -c cleanall -f <recipe_name> && bitbake -c build -f <recipe_name>
请注意:
<recipe_name>
应该不带.bb
扩展名传递。关于embedded-linux - BitBake中的任务do_patch()期间失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37322435/