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消息.
我做错了什么?
我的变量${S}在我的食谱中重新定义了这个内容:
S = "${WORKDIR}/${PN}-${PV}"
Run Code Online (Sandbox Code Playgroud)
但取程序下载my.patch和src/内部${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)
那已经有效了!