目录
第一节:什么是ALSA和ASOC
第二节:ALSA框架
第三节:ALSA的使用
第四节:ASOC的硬件框架
第四节:ASOC的软件框架
ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统)。
ALSA的官方网址为:AlsaProject
但是ALSA的缺点也是十分明显的:
1、Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Linux中有分别针对4个平台的驱动代码。
2、音频事件没有标准的方法来通知用户,例如耳机、麦克风的插拔和检测,这些事件在移动设备中是非常普通的,而且通常都需要特定于机器的代码进行重新对音频路劲进行配置。
3、当进行播放或录音时,驱动会让整个codec处于上电状态,这对于PC没问题,但对于移动设备来说,这意味着浪费大量的电量。同时也不支持通过改变过取样频率和偏置电流来达到省电的目的。
正因为此,ASOC诞生了!
ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些上面的局限性,而ASOC很好的解决了上述的问题!
本文不讨论ALSA的具体使用方法,后续会讲解ALSA的使用方法,感兴趣的小伙伴可以参考以下的博客学习:
https://blog.csdn.net/sinat_37817094/category_7691888.html
嵌入式设备的音频系统可以被划分为板载硬件(Machine)、Soc(Platform)、Codec三大部分。ASOC就是包含着这三大部分。它们的含义如下:
1、 Soc(Platform) :SOC上的片内外设部分,通常是半导体原厂商完成。
2、 Codec :具体的外设硬件(音频设备)。外设驱动通常有外设厂商完成。
3、 板载硬件(Machine) :将SOC与Codec连接起来那部分。由外设使用者编写。
对应着硬件框架,ASOC软件也分为三部分: 板载硬件(Machine)、Soc(Platform)、Codec 。他们的具体内容如下:
1、 Codec驱动:ASOC一个重要设计原则就是要求Codec驱动是平台无关的,它包含了一些音频的控件(Controls),音频接口,DAMP(动态音频电源管理)的定义和某些Codec IO功能。为了保证硬件无关性,任何特定于平台和机器的代码都要移到Platform和Machine驱动中。
必要时,也可以提供以下功能:
DAPM描述信息;
DAPM事件处理程序;
DAC数字静音控制;
2、Platform驱动 : 它包含了该SoC平台的音频DMA和音频接口的配置和控制(I2S,PCM,AC97等等);它也不能包含任何与板子或机器相关的代码。
3、Machine驱动: Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。
可参考博客:
Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)_DroidPhone的专栏-CSDN博客