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

在Buildroot中为BeagleBone Black配置ADAU1761编解码器设备树覆盖层

问题:BeagleBone Black无法识别ADAU1761编解码器

硬件与环境信息

  • 开发板:BeagleBone Black rev C
  • 音频编解码器:ADAU1761评估板(地址引脚接地,I2C地址0x38)
  • 连接方式:评估板SCL(控制端口1号引脚)接BBB的P9_19,SDA(控制端口3号引脚)接BBB的P9_20
  • 构建系统:Buildroot
  • 内核版本:linux-5.10.30-ti-r3.tar.gz
  • 内核配置:已开启CONFIG_SND_SOC_ADAU1761_I2C=y

设备树覆盖文件内容

/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";

    fragment@0 {
        target = <&i2c2>;  //should this be &i2c1?  I tried both
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            adau1761: codec@38 {
                compatible = "adi,adau1761";
                reg = <0x38>;
            };
        };
    };
};

Buildroot Defconfig配置

BR2_arm=y
BR2_cortex_a8=y
BR2_ARM_FPU_VFPV3=y
BR2_GLOBAL_PATCH_DIR="board/beaglebone/patches"
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_GLIBC_STABLE=y
BR2_TARGET_GENERIC_ISSUE="Welcome to ADAU1761 BBB"
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_TARGET_GENERIC_ROOT_PASSWD="dttfs@!"
BR2_ROOTFS_OVERLAY="/home/andrew/buildroot/board/andrew-bbb/rootfs-overlay"
BR2_ROOTFS_POST_BUILD_SCRIPT="board/beaglebone/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/beaglebone/genimage.cfg"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,beagleboard,linux,5.10.30-ti-r3)/linux-5.10.30-ti-r3.tar.gz"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="/home/andrew/buildroot/board/andrew-bbb/linux/defconfig"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="am335x-evm am335x-bone am335x-boneblack am335x-bonegreen am335x-evmsk am335x-boneblue am335x-boneblack-wireless"
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="/home/andrew/buildroot/board/andrew-bbb/adau1761/adau1761-beaglebone-black-i2c-i2s.dts"
BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_ALSACONF=y
BR2_PACKAGE_ALSA_UTILS_ACONNECT=y
BR2_PACKAGE_ALSA_UTILS_ALSALOOP=y
BR2_PACKAGE_ALSA_UTILS_ALSAUCM=y
BR2_PACKAGE_ALSA_UTILS_ALSATPLG=y
BR2_PACKAGE_ALSA_UTILS_AMIDI=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_APLAYMIDI=y
BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI=y
BR2_PACKAGE_ALSA_UTILS_ASEQDUMP=y
BR2_PACKAGE_ALSA_UTILS_ASEQNET=y
BR2_PACKAGE_ALSA_UTILS_BAT=y
BR2_PACKAGE_ALSA_UTILS_IECSET=y
BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7601U=y
BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7610E=y
BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT76X2E=y
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT61=y
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y
BR2_PACKAGE_LIBGTA=y
BR2_PACKAGE_LIBNL_TOOLS=y
BR2_PACKAGE_CONNMAN=y
BR2_PACKAGE_CONNMAN_WIFI=y
BR2_PACKAGE_CONNMAN_CLIENT=y
BR2_PACKAGE_DROPBEAR=y
BR2_PACKAGE_IW=y
BR2_PACKAGE_WIRELESS_TOOLS=y
BR2_PACKAGE_WIRELESS_TOOLS_LIB=y
BR2_PACKAGE_NANO=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.04"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am335x_evm"
BR2_TARGET_UBOOT_NEEDS_DTC=y
# BR2_TARGET_UBOOT_FORMAT_BIN is not set
BR2_TARGET_UBOOT_FORMAT_IMG=y
BR2_TARGET_UBOOT_SPL=y
BR2_TARGET_UBOOT_SPL_NAME="MLO"
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_RUSTC=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y

问题现象

已在Buildroot menuconfig的Kernel菜单「Out-of-tree Device Tree Source file paths」和U-Boot菜单「Additional configuration fragment files」中添加覆盖文件路径,但执行aplay -L仅识别板载音频设备,ADAU1761未被识别。


解决建议

1. 修正I2C总线对应关系

BBB的P9_19和P9_20对应的是i2c1(不是i2c2),设备树覆盖里的target = <&i2c1>才是正确的。同时确认基础DTS中i2c1的状态,若为disabled,需在覆盖中强制设为"okay"。

2. 排查硬件连接问题

启动BBB后执行i2cdetect -r 1,检查0x38地址是否有设备响应:

  • 若无响应,先确认ADAU1761评估板供电正常
  • 检查SDA/SCL引脚的上拉电阻(BBB内部带默认上拉,线缆过长时需额外添加)
  • 排查引脚连接是否接反、虚焊

3. 完善设备树覆盖内容

ADAU1761需要时钟配置和音频链路定义,补充后的覆盖示例:

/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";

    fragment@0 {
        target = <&i2c1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            adau1761: codec@38 {
                compatible = "adi,adau1761";
                reg = <0x38>;
                clocks = <&clkout2>;
                clock-names = "mclk";
                #sound-dai-cells = <0>;
            };
        };
    };

    // 可选:禁用板载音频避免冲突
    fragment@1 {
        target = <&tlv320aic3x>;
        __overlay__ {
            status = "disabled";
        };
    };
};

注:时钟源需根据硬件连接调整,可使用BBB的clkout2引脚(P9_42)提供MCLK,同时确保内核开启对应时钟支持。

4. 验证设备树覆盖加载状态

  • 检查U-Boot启动参数,确认添加了enable_uboot_overlays=1及覆盖文件加载参数
  • 启动后执行cat /proc/device-tree/soc/i2c@4802a000/codec@38/compatible,若输出adi,adau1761则说明覆盖已加载

5. 查看内核日志定位问题

执行dmesg | grep adau或dmesg | grep i2c,查看设备探测日志或错误信息:

  • 确认是否有i2c i2c-1: new_device: Instantiated device adau1761 at 0x38的成功日志
  • 排查是否存在时钟配置失败、初始化错误等信息

6. 校验Buildroot配置

  • 确认BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y已开启,且覆盖文件路径正确
  • 检查生成的镜像中,.dtbo文件是否存在于/boot/overlays目录
  • 确认U-Boot配置中正确指定了要加载的覆盖文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:35:59