Bitbake配方未按预期应用补丁

aic*_*ell 3 patch recipe bitbake

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

$ diff -Nurp src/ src_mod/ > my.patch
Run Code Online (Sandbox Code Playgroud)

补丁头以这三行开头:

 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
Run Code Online (Sandbox Code Playgroud)

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

SRC_URI = " \
    file://my.patch \
    file://src.tar.gz \
"
Run Code Online (Sandbox Code Playgroud)

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

${S}/my.path
${S}/src.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

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?
Run Code Online (Sandbox Code Playgroud)

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

SRC_URI = " \
    file://my.patch;patchdir=${S}/src \
    file://src.tar.gz \
"
Run Code Online (Sandbox Code Playgroud)

我希望"patchdir"与使用"patch -d dir"相同.但它不能按预期工作,它总是返回相同的ERROR消息.

我做错了什么?

aic*_*ell 8

我的变量${S}在我的食谱中重新定义了这个内容:

S = "${WORKDIR}/${PN}-${PV}"
Run Code Online (Sandbox Code Playgroud)

但取程序下载my.patchsrc/内部${WORKDIR},内部没有${S}目录,那么:

${WORKDIR}/my.path
${WORKDIR}/src.tar.gz
Run Code Online (Sandbox Code Playgroud)

并且tarball也被提取出来 ${WORKDIR}

${WORKDIR}/src/
Run Code Online (Sandbox Code Playgroud)

该修复正确设置"patchdir"属性,替换${S}${WORKDIR}

SRC_URI = " \
    file://my.patch;patchdir=${WORKDIR}/src \
    file://src.tar.gz \
"
Run Code Online (Sandbox Code Playgroud)

那已经有效了!