Ber*_*Joe 1 embedded-linux bitbake yocto
我正在使用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'
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
该问题与BitBakedo_patch()执行的任务有关,后者在Yocto中是任务计划程序和执行程序。在BitBake用户手册中阅读更多内容
但是,您遇到的错误不是由Yocto组件引起的。错误消息指出您的补丁程序无法应用到所需的文件,因为它无效。
通常.patch按称为hunks通过diff工具生成的片段排序。
一个大块的示例(来自Diff Utility文章@ 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.
Run Code Online (Sandbox Code Playgroud)
在Wiki文章中,您可以阅读如何解释这种大块头,但要简短一点:line with -表示特定的补丁程序将删除它,而line则将+由补丁程序添加。没有标记的行将作为参考(上下文),并且将保持不变。
现在,在您的错误消息中将其写为:
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 \
"
Run Code Online (Sandbox Code Playgroud)
最后一点:如果您使用的是> = 1.8的Yocto版本,则有一个方便的名称devtool(Yocto Mega Manual:devtool),它大大简化了使用临时源的工作。
编辑: 问题来自评论:
是的,我想知道为什么bitbake返回此错误消息
仅仅是因为您的补丁不适合目标源而可以应用。有关特定配方的一组任务,请参见:《BitBake手册:执行》一章。您可以通过传递列出任务: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扩展名。
| 归档时间: |
|
| 查看次数: |
4129 次 |
| 最近记录: |