【问题标题】:Bitbake recipe not applying patch as expectedBitbake 配方未按预期应用补丁
【发布时间】:2016-07-02 11:45:47
【问题描述】:

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

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

补丁头以这三行开头:

 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

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

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

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

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

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

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”属性,如下所示:

SRC_URI = " \
    file://my.patch;patchdir=${S}/src \
    file://src.tar.gz \
"

我希望“patchdir”与使用“patch -d dir”相同。但它没有按预期工作,它总是返回相同的错误消息。

我做错了什么?

【问题讨论】:

    标签: patch recipe bitbake


    【解决方案1】:

    我的变量 ${S} 在我的食谱中被重新定义,内容如下:

    S = "${WORKDIR}/${PN}-${PV}"
    

    但是提取器在${WORKDIR} 中下载my.patchsrc/,而不是在${S} 目录中,所以:

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

    并且${WORKDIR}内部也提取了tarball

    ${WORKDIR}/src/
    

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

    SRC_URI = " \
        file://my.patch;patchdir=${WORKDIR}/src \
        file://src.tar.gz \
    "
    

    这已经开始了!

    【讨论】:

      【解决方案2】:

      虽然作者为他们的独特问题提供了自己的解决方案,但这个问题是在 Yocto 构建中搜索“找不到要修补的文件”错误的解决方案时出现的第一个结果,所以我想分享一个针对产生相同错误输出的不同情况的解决方案。

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

      SRC_URI_append_machineoverride = " file://my.patch"
      

      代替

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

      请注意,“_append”的使用需要一个前导空格(与上面链接的线程中提到的尾随空格相反)。我还没有对此进行足够的调查来解释为什么需要这种语法,但我认为这仍然是对这个问题的记录的有价值的补充。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多