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

如何使bitbake -c devshell自动应用recipe中的补丁?

问题:如何进入已自动应用补丁的BitBake Devshell?

我想对BitBake Recipe快速修改,用bitbake -c devshell <recipe-name>打开对应Recipe的源码目录开发Shell,在里面修改代码、执行make验证结果。但发现Recipe里的补丁没被应用,而用devtool时补丁会自动生效,Yocto文档也说明do_patch步骤应该会执行。

我试过先执行bitbake -c patch <recipe-name>再进入Devshell,但git log和git diff都看不到补丁应用的痕迹,怀疑是Recipe本身的问题。以下是我使用的内核模块Recipe代码:

SUMMARY = "Example recipe"
DESCRIPTION = "Nothing special"
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""

SRC_URI += "git://github.com/some/repo;protocol=https \\
            file://0001-fix-for-makefile.patch;patchdir=.. \\
"
 
inherit module

SRCREV = "4242deadbeef"
PV = "git${SRCPV}"

S = "${WORKDIR}/git/sources"

请问如何进入已自动应用补丁的Devshell?


解决方案

问题根源

你的Recipe里补丁指定了patchdir=..,结合S = "${WORKDIR}/git/sources"的设置,意味着补丁会被应用到${WORKDIR}/git目录(也就是sources的父目录),但bitbake -c devshell默认进入的是S变量指向的${WORKDIR}/git/sources目录,所以你在这个目录里看不到补丁的修改痕迹,实际上补丁已经应用到了上级目录。

解决方法

  • 修正补丁路径配置
    如果补丁本来就是针对${WORKDIR}/git/sources目录的,直接去掉patchdir=..,让补丁默认应用到S指定的目录:

    SRC_URI += "git://github.com/some/repo;protocol=https \\
                file://0001-fix-for-makefile.patch \\
    "
    

    之后重新执行bitbake -c patch <recipe-name>再进入Devshell,就能看到补丁已应用。

  • 直接进入补丁应用的目录
    如果你需要保留patchdir=..的配置,可以先通过以下命令找到WORKDIR路径:

    bitbake -c devshell -e <recipe-name> | grep "^WORKDIR="
    

    得到路径后,在Devshell里切换到${WORKDIR}/git目录,就能看到补丁的修改内容。

  • 使用devtool工具链
    继续使用devtool的流程,它会自动处理补丁并进入正确的源码目录:

    devtool modify <recipe-name>
    devtool shell <recipe-name>
    

    这种方式会自动将补丁应用到源码树,并且支持后续的修改回灌到Recipe补丁中。

  • 验证补丁应用状态
    可以通过调试输出确认补丁是否被正确应用:

    bitbake -c patch -D <recipe-name>
    

    查看输出里的补丁应用路径和结果,确认是否和预期一致。


内容的提问来源于stack exchange,提问作者Mo_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 21:12:14