Yocto为使用scc文件的BSP内核配方添加调试模式配置问题
Yocto内核配方调试配置切换实现方案
两种方案失败的根因
- 第一种方案失效:单独追加到
SRC_URI的.scc文件没有绑定当前机器的KMACHINE/KTYPE匹配规则,内核构建用的kern-tools在聚合配置时,只会加载和当前目标硬件、内核类型匹配的scc依赖树,这种无引用的游离scc根本不会进入配置合并流程,仅被拷贝到构建目录,不会改动最终.config。 - 第二种方案报路径错误:新建的
armel-iproc_debug.scc没有正确继承原有scc的机器定义,不符合kern-tools的BSP路径搜索规则,解析阶段无法定位到bsp/armel-iproc对应的元数据目录。
推荐实现(单配方切换调试/发布模式,改动最小)
不需要维护两份配方,也不用修改现有scc逻辑,通过变量控制配置加载即可:
- 打开
linux-yocto-onl_5.10.bb,新增调试开关,默认关闭调试模式:
# 需要启用调试时将该值设为1即可,支持在local.conf、bbappend中覆写 KERNEL_DEBUG_ENABLE ?= "0"
- 在同配方中按开关状态,将调试配置片段条件追加到
SRC_URI:
SRC_URI += "${@bb.utils.contains('KERNEL_DEBUG_ENABLE', '1', 'file://my-kmeta/bsp/armel-iproc/extraconfigs_debug.cfg', '', d)}"
不需要额外在scc中声明该cfg文件,kern-tools会自动识别
SRC_URI中所有.cfg后缀的内核配置片段,按优先级合并到最终内核配置中。
拆分独立调试配方的正确写法
如果业务要求必须分离调试、发布两个独立配方,按以下规则修改可避免路径报错:
- 将新建的
armel-iproc_debug.scc放在和原有armel-iproc.scc相同的目录(即my-kmeta/bsp/armel-iproc/下),不要复制原有scc的内容,直接通过include继承原有配置:
include armel-iproc.scc kconf non-hardware extraconfigs_debug.cfg
- 调试版配方中的
KMACHINE、KTYPE、内核元数据destsuffix配置必须和原配方完全一致,不得随意修改,否则kern-tools无法匹配到BSP路径必然报错。
生效验证注意事项
修改配置后必须先清除内核构建缓存和sstate缓存,否则旧的配置快照会被直接复用,导致改动不生效:
bitbake -c cleansstate linux-yocto-onl
清理完成后重新编译,即可在构建目录的.config文件中确认调试相关配置项已按要求完成启用/禁用切换。
内容的提问来源于stack exchange,提问作者SAMPro
相关产品推荐
相关产品推荐

