Yocto devtool modify未将补丁作为提交应用的问题排查
解决Yocto devtool二次modify时补丁丢失的问题
针对你遇到的linux-raspberrypi配方在devtool二次操作时的异常,下面是具体的原因分析和解决方法:
问题根源
首次devtool modify+git commit+devtool finish后,补丁会被写入指定layer的.bbappend文件的SRC_URI:prepend中。但再次执行devtool modify时,devtool默认会拉取原始配方的源码,不会自动应用.bbappend里已有的补丁,导致工作目录中的源码是未修改的原始版本——既没有之前的提交历史,编译时配方又期望补丁已经存在,从而报错。执行devtool reset后,配方恢复到不加载补丁的原始状态,所以编译正常。
解决步骤
1. 二次modify时强制应用现有补丁
执行devtool modify时添加--apply-patches参数,让devtool自动加载.bbappend中的补丁到工作目录:
devtool modify --apply-patches linux-raspberrypi
进入工作目录后用git log就能看到之前的补丁提交历史,后续修改后再git commit+devtool finish会生成新的补丁追加到.bbappend中。
2. 手动在工作目录应用补丁
如果--apply-patches参数无效(部分旧版本可能不支持),可以手动进入devtool工作目录应用补丁:
# 进入devtool源码工作目录 cd build/workspace/sources/linux-raspberrypi # 应用bbappend中的所有补丁(路径根据你的layer位置调整) git apply ../../../../layers/meta-your-layer/recipes-kernel/linux/linux-raspberrypi/*.patch # 手动提交到本地git(可选,方便后续管理) git add . git commit -m "Apply existing patches from bbappend"
3. 清理devtool缓存后重新modify
如果工作目录存在缓存导致补丁无法加载,先清理再重新操作:
# 重置配方并清理工作目录 devtool reset linux-raspberrypi rm -rf build/workspace/sources/linux-raspberrypi # 重新modify并应用补丁 devtool modify --apply-patches linux-raspberrypi
4. 检查.bbappend文件的正确性
确认.bbappend中的补丁路径和格式无误:
- 补丁路径要指向layer中存放补丁的正确位置,比如:
SRC_URI:prepend = "file://0001-First-modification.patch file://0002-Second-modification.patch " - 补丁必须是git格式的diff(devtool finish自动生成的一般没问题),避免手动修改导致格式错误。
内容的提问来源于stack exchange,提问作者Luca Faggion
相关产品推荐
相关产品推荐

