一.alsa框架概述
ALSA,全称是Advanced Linux Sound Architecture,是Linux中提供声音设备驱动的内核组件,应用可以通过ALSA接口实现音频播放、录音、设备通路控制、音量控制、通话等功能。
在 Linux 内核设备驱动层,ALSA 提供了 alsa-driver,在应用层,ALSA 为我们提供了 alsa-lib,故在其支持下,Linux 应用程序只需要调用 alsa-lib 提供的 API,即可完成对底层音频硬件的控制。linux内核中ALSA的软件结构如下:
ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序只需要调用alsa-lib提供的API就可以完成对底层硬件的操作。
在alsa-driver中主要为以下两部分:
ALSA CORE:核心层,提供逻辑设备供用户空间访问。向上提供逻辑设备(PCM、CTL、MIDI、TIMER…)系统调用,向下驱动硬件设备(Machine、I2S、DMA、CODEC)。
ASoC Driver: 音频硬件设备驱动,由三大部分组成,分别是 Machine Driver、Platform Driver和Codec Driver。
二.ALSA ASoc
ASoC 把嵌入式设备的音频系统同样分为 3 大部分,Machine,Platform 和 Codec。
Machine:是指某一款机器,每个 Machine 上的硬件实现可能都不一样,CPU 不一样,Codec 不一样,音频的输入、输出设备也不一样。Machine 为 CPU、Codec、输入输出设备提供了一个载体,可以认为是 Platform 和 Codec 之间的粘合剂。Machine Driver则负责处理机器特有 Machine control。
Platform:主要作用是完成音频数据的管理,通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。实际上,把 Platform 认为是某个 SoC 更好理解。Platform Driver包含了该 SoC 平台的音频 DMA 和音频接口的配置和控制(I2S,PCM 等)。
Codec: 字面上的意思就是编解码器,Codec 里面包含了 I2S 接口、D/A、A/D、Mixer、PA(功放),通常包含多种输入(Mic、Line-in、I2S、PCM) 和多个输出(耳机、喇叭、听筒,Line-out)。
三.在alsa框架中添加音频芯片add2012
待更新。。。