如何将补丁指定应用到BitBake配方的特定git源码上?
问题根因
BitBake处理多源码仓库配方时,默认将SRC_URI中第一个拉取的代码仓库作为主源码目录,对应内置变量${S},默认路径为${WORKDIR}/git。所有未指定应用路径的补丁,都会默认在${S}目录下执行打补丁操作,这就是补丁始终作用于foo仓库、无法打到foo2源码上的核心原因。
修复方案
给需要定向应用的补丁项添加patchdir参数,明确指定补丁的工作目录,指向foo2仓库的实际解压路径即可,修改后的SRC_URI配置如下:
SRC_URI = "git://github.com/foo/foo.git;branch=main;protocol=https;name=${BPN};destsuffix=git \ git://github.com/foo2/foo2;branch=main;protocol=https;name=${FOO2};destsuffix=${FOO2} \ file://0001-Modify-A_value.patch;patchdir=${WORKDIR}/${FOO2} \ "
配置注意事项
- 路径要保持对应:你给foo2仓库配置的
destsuffix=${FOO2},意味着foo2代码拉取解压后的存放路径是${WORKDIR}/${FOO2},patchdir填这个路径,补丁就会在foo2的代码根目录下执行应用。 - 多补丁场景适配:如果后续有多个补丁需要打到不同仓库,给每个补丁项分别配置对应仓库路径的
patchdir即可;需要打到主仓库(foo)的补丁不需要额外加参数,会默认应用到${S}路径。 - 不要随意修改
${S}变量来调整补丁路径,这种方式会改变后续配置、编译阶段的默认源码查找路径,额外引入不必要的构建错误。 - 配置完成后可以先执行
bitbake -c unpack foo_git,进入对应配方的工作目录确认两个仓库的实际解压路径,避免路径拼写错误导致打补丁失败。
内容的提问来源于stack exchange,提问作者Mark Kang
相关产品推荐
相关产品推荐

