#Linux ALSA#ALSA各模块简介

你离开我真会死。 提交于 2020-02-25 15:26:20

1.Native ALSA Application:tinyplay/tinycap/tinymix,此三种用户程序直接调用alsa用户库接口来实现放音,录音,控制功能;

2.ALSA library API:alsa用户库接口,e.g.tinyalsa,alsa-lib;

3.alsa core:alsa核心层;向上提供逻辑设备系统调用,e.g. PCM ;向下驱动硬件设备 e.g. machine codec;

4.asoc core:asoc是建立在标准alsa core基础上,为更好的支持嵌入式系统以及应用于移动设备之音频codec的一套软件体系;

5.Hardware driver:音频硬件设备驱动;囊括三部分——machine,platform,codec;

5.1 platform

特指代某 SoC 平台的音频模块,e.g. qcom;这里platform又可分为两部分:

5.1.1 cpu dai

在嵌入式系统中通常是指soc支持I2S/PCM总线控制器,其主要功能则是把音频数据从I2S tx FIFO搬运到codec(此仅限回放声音的情形,若录制声音则为将音频数据从codec搬运到I2S tx FIFO);cpu_dai 通过 snd_soc_register_dai() 来注册。可注意:dai 是 Digital Audio Interface 的简称,分为 cpu_dai 和 codec_dai,这两者通过 I2S/PCM 总线连接;AIF 是 Audio Interface 的简称,嵌入式系统中一般是 I2S 和 PCM 接口。

5.1.2 pcm dma

负责把dma buffer中的音频数据搬运到I2S tx fifo中;可注意:某些情形下是不需要 dma 操作的,比如 Modem 和 codec直连,因为 Modem 本身已经把数据送到 FIFO 了,这时只需启动 codec_dai 接收数据即可;该情形下,Machine 驱动 dai_link 中需要设定 .platform_name = “msm-pcm-xxx”。

5.2 codec

编解码器;对于回放来说,userspace 传过之音频数据是经过采样量化的数字信号,在 codec 经过 DAC 转换成模拟信号然后输出到外放或耳机;

5.3 machine 

通常指某机器,使其配置 dai_link 把 cpu_dai、codec_dai、modem_dai 等各个音频接口给链结使其形成一条条音频链路,然后注册 snd_soc_card。和上面两个不一样,Platform 和 CODEC 驱动一般是可以重用的,而 Machine 有它特定的硬件特性,几乎是不可重用的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!