You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向指定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可成功应用补丁,疑问:操作有误在哪里?为何提示文件已存在但实际不存在?
问题原因与解决方法

核心原因

  1. 补丁路径解析冲突:在lib/wolfssl子仓库内生成的补丁,路径前缀是a/Makefile,但OpenEmbedded默认补丁工具会将a/、b/前缀对应到patchdir的上层目录,而非patchdir本身。当指定patchdir=lib/wolfssl时,工具会尝试在lib/wolfssl/a/Makefile位置创建文件,误判路径冲突。
  2. 工具行为差异: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:22:31