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

Buildroot 2022.11如何从树外dts文件编译生成dtbo?

在Buildroot 2022.11中自动生成并应用树外Device Tree Overlay(DTBO)

可以实现,Buildroot 2022.11支持从树外DTS文件批量生成DTBO,以下是具体操作步骤:

1. 启用内核Overlay支持

首先需要确保内核开启了Device Tree Overlay功能:

  • 创建一个内核配置片段文件(比如kernel-overlay.config),内容为:
    CONFIG_OF_OVERLAY=y
    
  • 在Buildroot配置中,通过BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES选项指定这个配置片段,让Buildroot在内核编译时自动启用该功能。

2. 批量编译树外DTS为DTBO

Buildroot默认的DTS编译逻辑是生成DTB,要生成DTBO需要自定义编译步骤,推荐通过内核编译后脚本实现:

  • 编写一个Shell脚本(比如build-dtbo.sh),内容如下:
    #!/bin/sh
    # 树外DTS存放目录(根据你的实际路径调整)
    OVERLAY_DTS_DIR="${BR2_EXTERNAL}/board/your-platform/overlays"
    # Buildroot提供的dtc工具路径
    DTC="${HOST_DIR}/bin/dtc"
    # DTBO输出目录(最终会打包到根文件系统)
    DTBO_OUTPUT="${BINARIES_DIR}/dtbo"
    
    # 创建输出目录
    mkdir -p "${DTBO_OUTPUT}"
    
    # 遍历所有树外DTS文件,编译为DTBO
    for dts_file in "${OVERLAY_DTS_DIR}"/*.dts; do
        dtbo_file="${DTBO_OUTPUT}/$(basename "${dts_file}" .dts).dtbo"
        # 使用dtc编译,-@参数是生成overlay的关键
        "${DTC}" -I dts -O dtb -@ -o "${dtbo_file}" "${dts_file}"
    done
    
  • 在Buildroot配置中,设置BR2_LINUX_KERNEL_POST_BUILD_SCRIPT选项指向这个脚本,Buildroot会在内核编译完成后自动执行该脚本,批量生成DTBO。

3. 将DTBO打包到系统中

要让系统能加载DTBO,需要将生成的DTBO文件放到合适的位置:

  • 通过BR2_ROOTFS_OVERLAY选项,指定一个根文件系统覆盖目录,比如在该目录下创建boot/overlays子目录,将${BINARIES_DIR}/dtbo下的所有DTBO文件复制到这里,Buildroot会自动将其打包到根文件系统镜像中。

4. 启动时加载DTBO

根据你的启动方式(U-Boot或GRUB等)配置加载逻辑:

  • 如果使用U-Boot,可以在启动脚本中添加fdt apply命令加载DTBO,比如:
    fdt apply ${bootdir}/overlays/your-overlay.dtbo
    
  • 或者通过内核启动参数指定,比如overlay_root=/boot/overlays(需要内核支持动态加载overlay)。

注意事项

  • 树外DTS文件必须符合Device Tree Overlay的语法规范,比如必须包含/dts-v1/;声明,以及fragment@N节点结构。
  • 确保你的DTBO与主DTB的硬件节点兼容,避免冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:30:35