在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
相关产品推荐
相关产品推荐

