跳转到内容

ASLA 子系统(一)概述

更新: 3/7/2025 字数: 0 字 时长: 0 分钟

ALSA (Advanced Linux sound architecture)框架为 Linux 提供了全面的音频功能,包括以模拟或数字格式录制和播放音频流,以及路由和混音功能。ALSA 还支持音频中间件,例如 PulseAudio、Gstreamer 或 Android。

系统概述

ALSAOverview.png

组件描述

用户应用层

  • Client Application(客户端应用)
    • alsa-utils:ALSA 的用户空间工具集,如 aplay、arecord 等,用于播放和录制音频。
    • Application:用户开发的应用程序,如音乐播放器、音频处理软件等,它们通过 ALSA 库与底层交互。
  • ALSA Library(ALSA 库)
    • alsa-lib:提供用户空间 API,供应用程序访问 ALSA 驱动。例如,snd_pcm_open() 用于打开 PCM 设备。

内核空间

  • ALSA Framework(ALSA 框架)
    • pcm:管理 PCM(脉冲编码调制)音频流,处理音频数据的传输。
    • control:用于控制音量、增益、音频路由等。
  • ASoC Framework(ASoC 框架)
    • pcm dmaengine:处理音频数据的 DMA 传输。
    • soc core:ASoC 框架的核心组件,管理音频子系统的整体行为。
    • dapm(Dynamic Audio Power Management):用于动态控制音频通路的电源管理,优化功耗。
  • ASoC Drivers(ASoC 驱动层)
    • machine driver(机器驱动):定义音频系统的整体连接,包括 CPU、Codec 及其交互方式。
    • CPU DAI driver(数字音频接口驱动):负责 SoC 内部的音频接口,如 I2S、SAI、PCM 等。
    • Codec driver(编解码器驱动):驱动外部音频编解码器(如果存在)。

硬件层

  • SoC

    • CPU DAI Peripheral(数字音频接口外设):如 I2S、SAI(串行音频接口)等,负责音频数据的传输。
  • External Devices(外部设备)

    • Codec or connector(编解码器或连接器):外部音频硬件,如 DAC(数模转换器)、ADC(模数转换器)、耳机放大器等。

Debug

Procfs filesystem

  • List PCM audio devices:
    bash
    cat /proc/asound/pcm
  • Get hardware parameters of a PCM audio device (device "0" of card "0" here):
    bash
    cat /proc/asound/card0/pcm0p/sub0/hw_params

Debugfs filesystem

  • List DAIs

    bash
    cat /sys/kernel/debug/asoc/dais
  • List DAPMs of "xxx.audio-controller" CPU DAI of "STM32MP1-EV" soundcard

    bash
    ls /sys/kernel/debug/asoc/STM32MP1-EV/xxx.audio-controller/dapm

动态跟踪

ALSA 框架和驱动程序调试跟踪可以使用动态调试机制添加到内核日志中。

  • 示例:激活 SAI Linux 驱动程序的动态跟踪,并将跟踪打印到控制台:
    bash
    echo -n 'file stm32_sai.c +p; file stm32_sai_sub.c +p' > /sys/kernel/debug/dynamic_debug/control; 
    dmesg -n8;

激活 DAPM 跟踪

先决条件:必须先在 Linux 内核配置中启用 CONFIG_FUNCTION_TRACER 配置

  • 启用跟踪
    bash
    echo '1' > /sys/kernel/debug/tracing/events/asoc/enable
  • 检查日志:
    bash
    cat /sys/kernel/debug/tracing/trace

激活 PCM 硬件参数跟踪

先决条件:必须先在 Linux 内核配置中启用 CONFIG_FUNCTION_TRACER 和 CONFIG_SND_DEBUG 配置

  • 启用跟踪
    bash
    echo '1' > /sys/kernel/debug/tracing/events/snd_pcm/enable
  • 检查日志:
    bash
    cat /sys/kernel/debug/tracing/trace

激活 PCM 缓冲区状态跟踪(PCM 环形缓冲区溢出/欠载调试)↑

先决条件:必须先在 Linux 内核配置中启用 CONFIG_FUNCTION_TRACER、CONFIG_SND_DEBUG、CONFIG_SND_DEBUG_VERBOSE 和 SND_PCM_XRUN_DEBUG 配置

  • 设置 XRUN 跟踪详细程度[9]
    bash
    # Enable basic debugging and stack dump
    echo 3 > /proc/asound/card0/pcm0p/xrun_debug
  • 启用跟踪[7]
    bash
    echo '1' > /sys/kernel/debug/tracing/events/snd_pcm/enable
  • 检查日志:
    bash
    cat /sys/kernel/debug/tracing/trace

参考与致谢