我正在使用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'
我该如何解决这个问题?
答案 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,就会有一个名为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
扩展名的情况下通过。