Bitbake配方未按预期应用补丁

时间:2016-03-16 14:19:12

标签: patch recipe bitbake

我有一个tarball src.tar.gz,其内容已解压缩到src /中,并使用此命令生成此源代码的补丁:

<video>

补丁标题以这三行开头:

$ diff -Nurp src/ src_mod/ > my.patch

我的bitbake配方使用此SRC_URI引用路径和tarball文件:

 diff -Nurp src/path/to/file src_PATCHED/path/to/file
 --- src/path/to/file  2012-10-22 05:52:59.000000000 +0200
 +++ src_PATCHED/path/to/file  2016-03-14 12:27:52.892802283 +0100

do_fetch和do_unpack任务按预期工作,将my.patch和src /留在$ {S}目录中,即:

SRC_URI = " \
    file://my.patch \
    file://src.tar.gz \
"

但是do_patch任务失败并显示此ERROR消息:

${S}/my.path
${S}/src.tar.gz

我测试了不同的替代方案,例如设置“patchdir”属性,如下所示:

ERROR: Command Error: exit status: 1  Output:
Applying patch my.patch
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?

我预计“patchdir”与使用“patch -d dir”相同。但它不能按预期工作,它总是返回相同的ERROR消息。

我做错了什么?

2 个答案:

答案 0 :(得分:7)

我的变量document.getElementById('testo_da_inviare').onclick 在我的食谱中重新定义了这个内容:

${S}

但是,抓取工具会在S = "${WORKDIR}/${PN}-${PV}" 内部my.patchsrc/下载,而不是在${WORKDIR}目录中,所以:

${S}

还在${WORKDIR}/my.path ${WORKDIR}/src.tar.gz

中提取了tarball
${WORKDIR}

该修复正确设置了“patchdir”属性,将${WORKDIR}/src/ 替换为${S}

${WORKDIR}

那已经有效了!

答案 1 :(得分:0)

尽管作者提供了自己的解决方案,但该问题是在Yocto构建中搜索“找不到要修补的文件”错误的解决方案时出现的第一个结果,因此我想分享一个产生相同错误输出的不同情况的解决方案。

在我的情况下,我尝试使用.bbappend文件将覆盖控制的补丁应用于先前存在的配方,并且收到“找不到要修补的文件”错误。 https://community.nxp.com/thread/474138处的线程确定了解决方案:使用“ _append”语法而不是“ + =”语法。也就是说,使用:

SRC_URI_append_machineoverride = " file://my.patch"

代替

SRC_URI_machineoverride += "file://my.patch"

请注意,使用'_append'需要一个前导空格(与上面链接的线程中指出的尾随空格相反)。我还没有进行足够的研究来解释为什么必须使用这种语法,但是我认为这仍然是对该问题记录的宝贵补充。