在Yocto中为树莓派镜像应用RT补丁时遭遇linux-yocto_4.12.bbappend配方不可用错误的求助
解决Yocto中树莓派内核RT补丁应用失败的方案
先拆解你遇到的核心问题
你看到的ERROR: No recipes available for: ... linux-yocto_4.12.bbappend错误,本质是两个关键失误:
- BBappend文件名不匹配:树莓派在Yocto环境中使用的内核Recipe是
linux-raspberrypi,而非linux-yocto,你写的bbappend对应了错误的内核包,Yocto找不到匹配的Recipe文件。 - 内核版本完全不兼容:你下载的是5.4.70版本的RT补丁,但bbappend指向了4.12版本的内核,跨大版本的补丁根本无法适配。
下面是一步步的修复方案:
步骤1:修正BBappend文件名
首先确认当前Yocto环境中树莓派内核的Recipe版本:
- 打开
meta-raspberrypi/recipes-kernel/linux/目录,你会看到类似linux-raspberrypi_5.4.bb的文件(对应你参考的Dunfell 3.1.20版本分支)。 - 在你的自定义层
meta-mylayer/recipes-kernel/linux/目录下,创建(或重命名原文件)为linux-raspberrypi_%.bbappend(%是通配符,适配所有5.4.x版本的树莓派内核),或者精确命名为linux-raspberrypi_5.4.bbappend。
步骤2:调整补丁存放路径
把你下载解压好的patch-5.4.70-rt40.patch移动到:yocto/meta-mylayer/recipes-kernel/linux/linux-raspberrypi/
(路径要和bbappend对应的Recipe名称linux-raspberrypi一致,这样FILESEXTRAPATHS才能正确定位到补丁)
步骤3:修正BBappend内容
编辑新的linux-raspberrypi_%.bbappend文件,写入以下内容:
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI_append = " file://patch-5.4.70-rt40.patch"
注意:
SRC_URI_append后面要加空格,确保补丁路径被正确解析。
步骤4:验证补丁与内核版本匹配
确认你的树莓派内核基线版本是5.4.70:
- 执行
bitbake linux-raspberrypi -e | grep "^PV"查看内核版本号,如果不是5.4.70,需要下载对应内核版本的RT补丁(比如内核是5.4.80,就找对应rt版本的补丁)。
步骤5:清理缓存并重新构建
先清理之前的内核构建缓存,避免旧内容干扰:
bitbake -c cleanall linux-raspberrypi bitbake -c cleansstate linux-raspberrypi
然后重新构建镜像:
bitbake core-image-base
额外检查点
- 确保你的
meta-mylayer已经正确添加到build/conf/bblayers.conf中,Yocto才能扫描到这个自定义层的bbappend。 - 如果补丁打失败,可以通过
bitbake linux-raspberrypi -c patch -v查看补丁过程的详细日志,排查补丁格式或路径问题。
内容的提问来源于stack exchange,提问作者Nikita Gupta
相关产品推荐
相关产品推荐

