Yocto Kirkstone添加DTS到树莓派内核报错:无mydts目标
问题
使用Yocto Kirkstone版本,目标是为树莓派Linux内核添加DTS文件。创建了meta-mydts层,目录结构如下:
meta-main-layer meta-raspberrypi meta-mydts/ ├── conf │ └── layer.conf ├── COPYING.MIT ├── README └── recipes-kernel └── linux ├── linux-raspberrypi │ └── raspberrypi4-64 │ └── my.dts └── linux-raspberrypi_5.15.bbappend
编写的linux-raspberrypi_5.15.bbappend文件内容:
SRC_URI += "file://mydts.dts;subdir=git/arch/arm/boot/dts/overlays" FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" PACKAGE_ARCH = "${MACHINE_ARCH}" KERNEL_DEVICETREE += "mydst.dtb"
在meta-main-layer的镜像定义中添加:
IMAGE_INSTALL:append += " mydts"
但构建时报错:
ERROR: Nothing RPROVIDES 'mydts' (but meta-main-layer/recipes-core/images/image-64.bb RDEPENDS on or otherwise requires it) NOTE: Runtime target 'mydts' is unbuildable, removing... Missing or unbuildable dependency chain was: ['mydts']
求问如何修复这个构建问题,遗漏了哪些步骤?
解决方案
1. 移除错误的IMAGE_INSTALL配置
DTS是内核的一部分,不需要单独打包为mydts包,直接删除镜像配置中的这一行:
IMAGE_INSTALL:append += " mydts"
2. 修正文件名拼写错误
bbappend文件存在两处拼写不一致问题:
- 实际DTS文件是
my.dts,SRC_URI中写错为mydts.dts,修正为:SRC_URI += "file://my.dts;subdir=git/arch/arm/boot/dts/overlays" KERNEL_DEVICETREE中写错为mydst.dtb,需和源文件名对应:# 普通设备树 KERNEL_DEVICETREE += "my.dtb" # 如果是overlay,改为以下格式 KERNEL_DEVICETREE += "overlays/my.dtbo"
3. 修正FILESEXTRAPATHS路径
DTS文件放在linux-raspberrypi/raspberrypi4-64/目录下,需要让Yocto能找到这个路径,修改为:
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}/${MACHINE}:"
4. 确认meta-mydts层已添加到构建配置
检查build/conf/bblayers.conf,确保包含meta-mydts层:
BBLAYERS ?= " \ ${TOPDIR}/meta-main-layer \ ${TOPDIR}/meta-raspberrypi \ ${TOPDIR}/meta-mydts \ # 其他已有层... \ "
5. 清理缓存后重新构建
执行以下命令清理内核构建缓存,再重新构建镜像:
bitbake -c clean linux-raspberrypi bitbake your-image-name
内容的提问来源于stack exchange,提问作者Antoni
相关产品推荐
相关产品推荐

