Yocto自定义内核配方报错:Nothing RPROVIDES 'vmlinux'求排查
问题排查与修复
核心问题
你的配方错误引入了linux-yocto.inc,该文件是为**Yocto定制的内核仓库(带yocto补丁层、Git管理)**设计的,与你使用的纯kernel.org vanilla tar包内核不兼容,导致变量解析异常(比如KERNEL_IMAGETYPE的条件表达式未完成解析、错误依赖vmlinux)。
修复步骤
1. 修改内核配方linux-vanilla-lts.bb
移除对linux-yocto.inc的引用,调整变量适配vanilla内核:
SUMMARY = "Linux 6.1 LTS vanilla kernel for Olinuxino A20" COMPATIBLE_MACHINE = "olinuxino-a20" inherit kernel # 纯vanilla内核源 SRC_URI = "http://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.38.tar.xz" LINUX_VERSION = "6.1.38" LINUX_VERSION_EXTENSION = "-custom" # 适配tar包的版本号(无需Git后缀) PV = "${LINUX_VERSION}${LINUX_VERSION_EXTENSION}" # 指定sunxi平台的镜像类型和设备树 KERNEL_IMAGETYPE = "zImage" KERNEL_DEVICETREE = "sun7i-a20-olinuxino-lime.dtb" # 根据你的具体板子型号调整 # 若需自定义配置,可添加:SRC_URI += "file://defconfig"
2. 关键修改说明
- 移除
linux-yocto.inc:该文件包含的逻辑依赖Yocto内核的Git仓库结构、补丁管理系统,vanilla tar包不需要这些,强行引入会导致变量解析错误。 - 调整PV变量:你使用的是tar包而非Git仓库,
git${SRCPV}无意义,直接使用内核版本号+自定义后缀即可。 - 指定
KERNEL_IMAGETYPE和KERNEL_DEVICETREE:明确sunxi平台需要的镜像格式(zImage)和对应设备树,避免内核构建时的默认值不匹配硬件。 - defconfig来源:如果没有自定义defconfig,Yocto会默认使用内核源码中的
sunxi_defconfig;也可以从meta-sunxi的linux-mainline配方中复制defconfig到你的层中,通过SRC_URI += "file://defconfig"引入。
3. 验证修复
执行以下命令重新测试:
bitbake -c cleanall linux-vanilla-lts bitbake -c menuconfig linux-vanilla-lts
额外注意事项
- 确保
meta-my-layer优先级(9)高于meta-sunxi(8),保证你的配方被优先选用。 - 若需添加硬件相关补丁,可将补丁文件放在配方目录的
files/下,通过SRC_URI += "file://0001-your-patch.patch"引入。
内容的提问来源于stack exchange,提问作者rlakoda
相关产品推荐
相关产品推荐

