1、声卡驱动架构
linux下面的声卡架构主要有两种,一种是OSS架构,另一种是ALSA架构。
a、OSS
b、ALSA
1)
2)对ALSA操作的一些设备文件
3)ALSA-OSS封装
madplay播放器它用的是OSS架构的接口,为了能让这些以前比较优秀的播放器能继续在linux下使用,那么就提供了ALSA-OSS的封装
2、声卡驱动集成
去linux下打开linux内核,然后去做配置
make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-
现在的linux内核基本上都带了声卡驱动的,只不过需要我们去把它用起来,使能它
位于Device Drivers里面,然后Sound card support->进入到Advanced linux Sound Architecture里面->因为我们的声卡属于片上的声卡找到ALSA for Soc audio support->最后选择SOC AC97 Audio support for Mini6410 with WM9713
那么以上是声卡驱动的选择;再往回退到Advanced Linux sound Architecture里面,->一般会dio选API择OSS Mixer API,OSS PCM(digital audio)API,(甚至可以选择OSS PCM(digital audio)API -include plugin system);他们是OSS-ALSA的封装层,用于支持老的OSS。配置好之后,就可以去编译内核了。然后通过NFS挂载起来。
去/dev/目录下检查根本没有这些设备文件,说明没有安装好驱动。虽然在刚才的配置里面已经配置好了,但是这个配置是假象的,它根本没有编译进内核,这时候它是以独立的.ko方式编译的。
在这里
针对上面两种方式都要做一下:
补充:ASoC声卡驱动架构
ALSA片上系统层(ALSA System on Chip,ASoC)是建立在标准ALSA驱动之上的一个软件层次,被设计来为嵌入式处理器和移动设备的音频编解码器提供更好的ALSA支持。
ASoC将嵌入式设备的音频系统从软件层面划分为以下3个组件:
Codec驱动:即音频编解码器驱动,ASoC的一个重要设计原则就是要求Codec驱动是平台无关的。Codec驱动通常需要完成音频控制项添加、音频接口实现、DAPM(动态音频电源管理)定义和音频编解码器的IO功能。
Platform驱动:即平台相关驱动,Platform驱动通常需要实现针对特定片上系统平台的音频DMA和音频接口(如I2S、PCM、AC97)驱动。
Machine驱动:即机器相关驱动(或板级相关驱动),Machine驱动负责处理机器特有的一些控件和音频事件(例如,播放音频时,需要先打开一个放大器)。
上图是以上3个组件之间的关系,可见Codec驱动和Platform驱动需要由Machine驱动把他们结合在一起,以使3个组件能够协同工作。另外Platform驱动和Codec驱动都需要实现各自的数字音频接口(DAI),其中Platform驱动的DAI描述特定片上系统处理器的音频接口,而Codec驱动的DAI与平台无关。Machine驱动只有在这两种DAI配置匹配时,在通过他们将Platform驱动和Codec驱动结合在一起。
其涉及的数据结构定义在include/sound/soc.h中,
ASoc为声卡注册一个名称是“soc-audio”的平台设备,然后将由snd_soc_device结构描述声卡设备实例设置为该平台设备的驱动数据。
可以认为snd_soc_device是整个ASoC数据结构的基础。由它引出了snd_soc_card和snd_soc_codec两个结构,然后snd_soc_card又引出了snd_soc_platform、snd_soc_dai_link。
Machine驱动:snd_codec_device、snd_soc_card
Platform驱动:snd_soc_platform。
Codec驱动:snd_soc_codec、snd_soc_codec_device。
snd_soc_dai_link负责连接Platform驱动和Codec驱动。
有关数字音频接口(DAI)的知识:
ASoC驱动支持便携式音频设备的Codec和SoC控制器上常见的3种DAI:AC97接口,I2S接口,PCM接口
1)AC97接口
这种DAI组成:一根用于硬件复位的RESET线、两根分别用于音频数据输入输出(即录音和播放)的SDATA_IN和SDATA_OUT线、一根通常由Codec驱动的位时钟线(BCLK)和一根由SoC控制器驱动的帧同步时钟线(SYNC)组成。
2)I2S接口
I2S接口是一种4线式音频接口:一根位时钟线(BCLK),一根用于选择声道的时钟同步线(LRCLK),和两根分别用于音频数据发送和接收额Tx和Rx线。除了这4根线外,I2S有时还会提供一根系统时钟线(SYSCLK).
3)PCM接口
它通I2S接口类似,也是由四根线构成:一根位时钟线(BCLK),一根帧同步线(SYNC),两根分别用于音频数据接收和发送的Rx和Tx线。