You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto Kirkstone为Beaglebone Black添加自定义设备树的问题

解决Beaglebone Yocto Kirkstone自定义设备树集成问题

1. 修复自定义设备树配方,确保dtb安装到/boot

你之前的配方能编译dtb,但未正确配置安装路径,导致添加到镜像时出错。修改配方如下:

inherit devicetree allarch

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI = "file://mycustom.dts;subdir=git/overlays"

S = "${WORKDIR}/git/overlays"
COMPATIBLE_MACHINE = ".*beaglebone.*"

# 指定包包含的文件路径
FILES_${PN} = "/boot/mycustom.dtb"

# 确保编译后的dtb复制到目标根文件系统的/boot目录
do_install:append() {
    install -d ${D}/boot
    install -m 0644 ${B}/mycustom.dtb ${D}/boot/
}

关键说明:

  • 添加inherit allarch:设备树文件不属于特定硬件架构,避免包架构不匹配问题
  • 明确FILES_${PN}:告知BitBake该包的安装文件,生成的包会包含/boot/mycustom.dtb,解决添加镜像时的"找不到匹配包"错误
  • do_install:append:确保编译好的dtb被正确复制到目标路径

2. 自动修改extlinux.conf添加DEVICETREE配置

无需补丁内核或U-Boot,有两种简便方式实现:

方法一:自定义extlinux.conf模板覆盖原配置

  1. 创建配方meta-yourlayer/recipes-bsp/extlinux/extlinux-conf-custom.bb:
SUMMARY = "Custom extlinux.conf for Beaglebone"
DESCRIPTION = "Adds custom DEVICETREE entry to extlinux.conf"
PR = "r1"

inherit allarch
DEPENDS += "extlinux-conf"

SRC_URI = "file://extlinux.conf.in"
S = "${WORKDIR}"

do_install() {
    install -d ${D}${sysconfdir}/extlinux
    install -m 0644 ${WORKDIR}/extlinux.conf.in ${D}${sysconfdir}/extlinux/extlinux.conf
}

RDEPENDS:${PN} = "extlinux-conf"
FILES_${PN} = "${sysconfdir}/extlinux/extlinux.conf"
  1. 创建模板文件meta-yourlayer/recipes-bsp/extlinux/files/extlinux.conf.in:
default Yocto
label Yocto
   kernel /zImage
   DEVICETREE /mycustom.dtb
   fdtdir /
append root=PARTUUID=f8fbccd5-02 rootwait console=ttyS0,115200
  1. 在local.conf中添加:
IMAGE_INSTALL:append = " extlinux-conf-custom"

构建时会用自定义配置覆盖原extlinux.conf。

方法二:通过postinst脚本动态修改

在自定义设备树配方中添加内嵌postinst脚本,在根文件系统生成后自动修改配置:

# 保留原配方内容,新增以下部分
pkg_postinst:${PN}() {
    if [ -n "$D" ]; then
        EXT_CONF="$D/boot/extlinux/extlinux.conf"
    else
        EXT_CONF="/boot/extlinux/extlinux.conf"
    fi

    # 检查DEVICETREE行是否存在,不存在则插入到kernel行之后
    if ! grep -q "DEVICETREE /mycustom.dtb" $EXT_CONF; then
        sed -i '/kernel \/zImage/a \   DEVICETREE \/mycustom.dtb' $EXT_CONF
    fi
}

3. 验证构建

  1. 确保自定义配方所在layer已添加到bblayers.conf
  2. 在local.conf中添加:IMAGE_INSTALL:append = " mycustom"(替换为你的配方名称)
  3. 重新构建镜像:bitbake core-image

构建完成后,检查镜像内的/boot目录是否存在mycustom.dtb,以及/boot/extlinux/extlinux.conf是否包含DEVICETREE /mycustom.dtb行。

内容的提问来源于stack exchange,提问作者Katu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:38:19