Yocto内核补丁提示‘已应用’错误及缓存残留问题求助
问题原因及解决方法
核心原因
- 补丁应用状态被存在构建目录的补丁管理文件(如
.pc目录)里,常规clean/cleanall命令不会彻底清除这些状态记录,导致BitBake仍认为补丁需要处理。 - BitBake的任务缓存或包级缓存没完全失效,即便删除了
.bbappend和补丁文件,缓存里的旧配置还在生效。 - 可能有其他Layer的
.bbappend间接引用了该补丁,你删除的只是其中一处。
解决步骤
1. 彻底清除目标包的构建状态
用cleansstate命令完全清理设备树包的构建缓存,这比cleanall更彻底:
bitbake -c cleansstate <你的设备树包名>
如果不知道包名,可以用bitbake-layers show-recipes | grep dt这类命令查找。
2. 手动删除构建目录(极端情况)
如果cleansstate没用,直接找到对应包的工作目录删除,路径一般是:
tmp/work/<你的机器架构>/<设备树包名>/<版本号>/
直接删掉整个目录,强制BitBake重新拉取源码、处理补丁。
3. 检查所有关联的.bbappend
用命令查看所有针对目标包的.bbappend,确认是否有其他地方还在引用补丁:
bitbake-layers show-appends <你的设备树包名>
如果发现其他.bbappend里还有该补丁的引用,一并删除或注释掉。
4. 手动清理补丁状态文件
进入设备树源码的构建目录,找到.pc子目录(这是patch命令用来记录补丁应用状态的目录),直接删掉整个.pc目录:
rm -rf tmp/work/<你的机器架构>/<设备树包名>/<版本号>/.pc/
5. 验证并手动修复补丁状态
如果源码是Git管理的,进入源码目录检查补丁是否已应用:
git apply --check /path/to/your/patch.patch
如果提示补丁已应用,可手动反向撤销:
patch -R -p1 /path/to/your/patch.patch
内容的提问来源于stack exchange,提问作者il_mix
相关产品推荐
相关产品推荐

