向指定Git源码应用补丁失败求助:WolfSSL补丁无法正常应用
问题描述
- 在
u-boot-xlnx.bbappend配方中添加以下语句,将wolfssl仓库下载至U-Boot的lib目录:SRC_URI += " git://github.com/wolfssl/wolfssl.git;protocol=https;destsuffix=git/lib/wolfssl;name=wolf " - U-Boot仓库下的
lib/wolfssl成为独立Git仓库后,执行petalinux-devtool modify u-boot-xlnx下载源码并修改wolfssl内容,在lib/wolfssl目录内通过git diff > test.patch生成新增文件的补丁,补丁示例如下:diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..54509bdc1 --- /dev/null +++ b/Makefile @@ -0,0 +1,95 @@ +#obj-y += src/crl.o +#obj-y += src/internal.o +#obj-y += src/keys.o .. - 随后在bbappend配方中添加补丁引用:
SRC_URI += " file://test.patch;patchdir=lib/wolfssl " - 在干净环境执行
petalinux-devtool modify u-boot-xlnx时,补丁应用失败,报错信息:ERROR: Applying patch 'test.patch' on target directory '~/xilinx/build/tmp/work/zynqmp_generic-xilinx-linux/u-boot-xlnx/v2021.01-xilinx-v2022.2+gitAUTOINC+b31476685d_8970ff4c34-r0/devtooltmp-4ej1z9c4/workdir/git/lib/wolfssl' Applying 'test.patch' failed: stdout: The next patch would create the file Makefile, which already exists! Assume -R? [n] Apply anyway? [n] Skipping patch. 1 out of 1 hunk ignored - 手动进入
lib/wolfssl目录执行git apply可成功应用补丁,疑问:操作有误在哪里?为何提示文件已存在但实际不存在?
问题原因与解决方法
核心原因
- 补丁路径解析冲突:在
lib/wolfssl子仓库内生成的补丁,路径前缀是a/Makefile,但OpenEmbedded默认补丁工具会将a/、b/前缀对应到patchdir的上层目录,而非patchdir本身。当指定patchdir=lib/wolfssl时,工具会尝试在lib/wolfssl/a/Makefile位置创建文件,误判路径冲突。 - 工具行为差异:OpenEmbedded默认用
patch命令处理补丁,而patch对新增文件的路径校验逻辑和git apply不同,无法正确识别子仓库内的路径结构。
修复方案
方案1:重新生成正确路径的补丁
回到U-Boot仓库的根目录执行git diff,生成包含完整相对路径的补丁:
# 在U-Boot根目录执行 git diff > test.patch
修改bbappend中的补丁引用,去掉patchdir参数:
SRC_URI += " file://test.patch "
方案2:调整补丁内容并指定用git apply
编辑已有的test.patch,去掉所有a/、b/前缀:
diff --git Makefile Makefile new file mode 100644 index 000000000..54509bdc1 --- /dev/null +++ Makefile @@ -0,0 +1,95 @@ +#obj-y += src/crl.o +#obj-y += src/internal.o +#obj-y += src/keys.o ..
然后修改bbappend,强制使用git apply处理补丁:
SRC_URI += " file://test.patch;patchdir=lib/wolfssl;apply=git apply "
方案3:直接指定子仓库的SRCREV
由于lib/wolfssl是独立Git仓库,更规范的做法是在bbappend中指定wolfssl的修改后提交ID,替代补丁方式:
SRCREV_wolf = "你的wolfssl修改后的提交哈希值"
内容的提问来源于stack exchange,提问作者loannnlo
相关产品推荐
相关产品推荐

