Yocto自定义镜像内核defconfig修改未生效问题排查
Yocto内核配置与defconfig问题排查及解决
一、fragment.cfg不生效的原因及修复
你仅通过SRC_URI将fragment.cfg复制到内核源码目录,但Yocto内核构建流程不会自动识别这个配置片段。要让配置片段生效,需在bbappend中明确告知构建脚本:
修改linux-qoriq_5.15.bbappend,添加以下内容:
KERNEL_CONFIG_FRAGMENTS += "${WORKDIR}/fragment.cfg"
注意事项:
- 确保fragment.cfg的语法符合内核配置标准,比如
CONFIG_USB_XHCI_HCD=y或# CONFIG_USB_OHCI_HCD is not set - 无需移除
SRC_URI中对fragment.cfg的引用,KERNEL_CONFIG_FRAGMENTS才是触发配置合并的关键变量
二、自定义defconfig不覆盖的原因及修复
直接通过SRC_URI添加自定义defconfig无法生效,因为Yocto内核Recipe默认从内核源码的arch/xxx/configs/目录或Recipe指定路径加载defconfig,需按以下步骤调整:
1. 明确指定defconfig来源
在bbappend中设置KERNEL_DEFCONFIG变量,指向你的自定义defconfig:
KERNEL_DEFCONFIG = "defconfig"
确保自定义defconfig文件放在linux-qoriq/ls1046ardb/目录下(与补丁同路径),你已配置FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:",Yocto会优先从该路径查找文件。
2. 清理旧构建缓存
若之前已构建过内核,旧的defconfig可能残存在缓存中,需先清理:
bitbake linux-qoriq -c cleansstate
之后重新构建镜像:
bitbake custom-image
额外提示
- 若你是基于原有defconfig做增量修改,使用
KERNEL_CONFIG_FRAGMENTS会比直接替换defconfig更灵活,能避免后续内核版本升级时丢失自定义配置 - 确认自定义defconfig的文件名与
KERNEL_DEFCONFIG指定的完全一致,比如文件名为ls1046ardb_defconfig时,需将KERNEL_DEFCONFIG设为对应名称
内容的提问来源于stack exchange,提问作者Simon Rechermann
相关产品推荐
相关产品推荐

