如何使bitbake -c devshell自动应用recipe中的补丁?
我想对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_

