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

Buildroot未用-@选项编译设备树,U-Boot应用Overlay报错

问题:Buildroot 2022.11编译Radxa Zero设备树未生成/__symbols__节点,导致Overlay应用失败

背景

使用Buildroot 2022.11为Radxa Zero构建镜像,需要自行编写设备树Overlay以激活ttyAML0和PWM_C。已开启BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y选项,但编译出的基础DTB未包含/__symbols__节点,导致U-Boot执行fdt apply ${dto_addr}时报错:

failed on fdt_overlay_apply(): FDT_ERR_BADSTRUCTURE
base fdt does did not have a /__symbols__ node
make sure you've compiled with -@

使用DietPi预编译的DTB时Overlay可正常工作,且已尝试make clean全量重建镜像,问题依旧。

排查与解决步骤

  1. 启用内核符号节点配置
    基础DTB生成/__symbols__节点的前提是内核开启CONFIG_OF_SYMBOL=y,该配置会让dtc自动添加-@编译参数:

    • 进入Buildroot内核配置界面:make linux-menuconfig
    • 找到路径Device Drivers -> Generic Driver Options -> Device Tree and Open Firmware support -> Maintain symbol table for exported symbols,确保该选项被勾选
    • 保存配置后重新编译内核与DTB
  2. 验证Buildroot的DTB编译参数
    若BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y未正确传递-@参数到dtc,可手动检查并修正:

    • 进入Buildroot输出目录下的build/linux-<内核版本>/arch/arm64/boot/dts/amlogic
    • 执行make V=1 meson-g12a-radxa-zero.dtb,查看输出中的dtc命令是否包含-@
    • 若未包含,直接修改Buildroot的package/linux/linux.mk,在DTC_FLAGS相关行添加参数:
      DTC_FLAGS += -@
      
  3. 确认基础DTB的正确指定
    确保Buildroot正确指向Radxa Zero的基础DTB:

    • 检查BR2_LINUX_KERNEL_INTREE_DTS_NAME是否设置为amlogic/meson-g12a-radxa-zero(对应内核源码中的路径)
    • 若是自定义DTB,需确保编译时同样添加-@参数
  4. 检查Overlay的编译配置

    • 确认BR2_LINUX_KERNEL_DTB_OVERLAYS已正确指定你的ttyAML0和PWM_C的Overlay文件路径(如path/to/ttyaml0-overlay.dts path/to/pwm-c-overlay.dts)
    • 验证Overlay的.dts文件语法无错误,避免因编译失败导致功能异常
  5. 对比DietPi的内核与DTB差异
    若以上步骤无效,可对比DietPi使用的内核版本与Buildroot内核版本,查看DietPi是否有额外patch处理DTB符号节点,或其dtc编译参数有特殊设置,将对应配置或patch移植到你的Buildroot项目中


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:10:25