文档详情

Linux ALSA声卡驱动原理 设备打开过程和数据流程

夏**
实名认证
店铺
PPTX
753.06KB
约41页
文档ID:606801508
Linux ALSA声卡驱动原理 设备打开过程和数据流程_第1页
1/41

单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Linux ALSA,声卡驱动原理分析,-,设备打开过程和数据流程,目 录,一、导读,二、,ALSA,架构简介,三、准备工作,四、设备打开过程和数据流程,i.,整体分析,ii.,设备驱动程序,insmod,流程图,iii.,应用程序主流程图,iv.,声卡打开流程图,v.,数据写入流程图,五、,ALSA,其它形式的数据写入方法流程图,目 录,一、导读,二、,ALSA,架构简介,三、准备工作,四、设备打开过程和数据流程,i.,整体分析,ii.,设备驱动程序,insmod,流程图,iii.,应用程序主流程图,iv.,声卡打开流程图,v.,数据写入流程图,五、,ALSA,其它形式的数据写入方法流程图,一、导 读,本文主要针对,ALSA,声卡硬件驱动,从应用程序的角度展示了从用户层到内核层再到硬件驱动程序控制声卡硬件的过程主要包括,insmod,、声卡打开、数据写入三个流程rmmod,和声卡关闭的流程与,insmod,、声卡打开类似,本文没有描述ALSA,的其他部分如控制、录音等,不在本文叙述范围内其中的,insmod,是系统初始化时或手动加载,不需要具体的应用程序参与。

具体到硬件,使用的是,ENS1371,芯片,关于最小化的,ENS1371,芯片驱动程序,可以参考,Linux ALSA,声卡驱动开发最佳实践,.pptx,目 录,一、导读,二、,ALSA,架构简介,三、准备工作,四、设备打开过程和数据流程,i.,整体分析,ii.,设备驱动程序,insmod,流程图,iii.,应用程序主流程图,iv.,声卡打开流程图,v.,数据写入流程图,五、,ALSA,其它形式的数据写入方法流程图,二、,ALSA,架构简介,ALSA,是,Advanced Linux Sound Architecture,,高级,Linux,声音架构的简称,它在,Linux,操作系统上提供了音频和,MIDI(Musical Instrument Digital Interface,,音乐设备数字化接口)的支持它包含,API,库和工具、内核驱动集合,,对,Linux,声音进行支持ALSA,包含一系列内核驱动对不同的声卡进行支持,还提供了,libasound,的,API,库用这些进行写程序不需要打开设备等操作,所以编程人员在写程序的时候不会被底层的东西困扰ALSA,自带的应用程序是,alsa-utils,工具包,包括,aplay,、,alsamixer,等。

aplay,用于在,ASLA,上播放音频alsamixer,用于改变音频信号的音量alsa-lib,是用户空间的函数库,提供了,libasound.so,给应用程序使用,应用程序应包含头文件,asoundlib.h,这个库通过提供封装函数,(ALSA-API),,使,ALSA,应用程序不需要涉及具体硬件,编写起来更容易alsa-lib,中有,control,,,timer,,,dmix,,,pcm,等,都是以插件,(plugin),的形式存在的alsa-lib,通过硬件访问层的系统调用与内核层进行交互alsa-driver,是音频设备的,alsa,内核部分的驱动集成在内核里面,大多是以模块的方式存在可分为三层1),最底层是硬件操控层,负责实现硬件操纵访问的功能,这也是声卡驱动程序中用户需实现的主要部分;,(2),中间层是,ASLA,驱动的核心部分,它由各种功能的音频设备组件构成,为用户提供了一些预定义组件(如,PCM,、,AC97,、音序器和控制器等),另外用户也可以自行定义设备组件;,(3),驱动的最上层是声卡对象描述层,它是声卡硬件的抽象描述,内核通过这些描述可以得知该声卡硬件的功能、设备组件和操作方法等。

二、,ALSA,架构简介,左图是从代码的角度体现了,alsa-lib,和,alsa-driver,及,hardware,的交互关系用户层的,alsa-lib,通过操作,alsa-driver,创建的设备文件,/dev/snd/pcmC0D0p,等对内核层进行访问内核层的,alsa-drivier,驱动再经由,sound,core,对硬件声卡芯片进行访问从而实现了,appalsa-libalsa-driverhardware,的操作图中右上角,OSS,相关部分是为了兼容,OSS,驱动模型而存在的不是本实践的相关部分目 录,一、导读,二、,ALSA,架构简介,三、准备工作,四、设备打开过程和数据流程,i.,整体分析,ii.,设备驱动程序,insmod,流程图,iii.,应用程序主流程图,iv.,声卡打开流程图,v.,数据写入流程图,五、,ALSA,其它形式的数据写入方法流程图,三、准备工作,为了更有效的跟踪,ALSA,的流程,需要在开始前进行一些准备工作,这包括用户层,ALSA-lib,库的调试方法和文档生成alsa-driver,的调试方法参见,Linux,基础培训,(2)-,驱动开发最佳实践,-1.pptx,。

对调用流程和数据流程进行分析时,这部分内容起到辅助作用1.ALSA-lib,调试方法,alsa-utils,中的,aplay,程序可以进行应用程序和,lib,库的调试操作如下:,(1),复制,alsa-utils,和,alsa-lib,到,linux,文件系统下,如:,#,cp,-rf,alsa-utils-1.0.16,/opt/,#,cp,-rf,alsa-lib-1.0.16,/opt/,红色文字表示,shell,中输入的命令,具体命令要根据具体环境自己修改alsa-utils-1.0.16,和,alsa-lib-1.0.16,从网上下,也可以在光盘,debian-506-source-DVD-1.iso,中的,pool/main/a/,文件夹下找到2).,复制音频文件,如复制,test_files,文件夹到,/opt,下,#,cp,-rf,test_files,/opt/,(3).,在,alsa-lib-1.0.16,中依次执行如下:,#,cd,/opt/alsa-lib-1.0.16,#,./configure,#,make,#,make install,系统需要安装,gcc,等工具。

4).,在,alsa-utils-1.0.16,中中依次执行如下:,#,cd,/opt/alsa-utils-1.0.16,#,./configure,#,cd,aplay,#,make,就会生成执行文件,aplay,5).,执行,aplay,文件播放,.wav,声音文件如:,#,./aplay /opt/test_files/pcm.wav,注意命令前面的,”,./,”,如果不加,而系统中又安装了,alsa-utils,工具,就会执行,/usr/bin/aplay,,注意不要混了6).,通过,gdb,可以对,alsa-utils,的,aplay,和,alsa-lib,的,libsound.so,进行本地调试gdb aplay,(gdb),set args,/opt/test_files/pcm.wav,(gdb),b main,(gdb),r,.,三、准备工作,2.ALSA-lib,调试方法示例图中红色表示为在,shell,中输入的命令,具体命令要根据具体环境自己修改跟踪代码时可以在,gdb,中使用,bt(backtrace),指令跟踪调用栈查看函数调用关系三、准备,工,工作,3.,生成,alsa-lib,文档,alsa-lib,中可以用,文,文档生成,工,工具,doxygen,生成,API,及相关说,明,明文档。

在,在,alsa-lib-1.0.16,中依次执,行,行如下:,#cd/opt/alsa-lib-1.0.16,#cddoc,#doxygendoxygen.cfg,在新生成,的,的文件夹,doxygen/html,中就会有,网,网页形式,的,的文档,,首,首页为,index.html,三、准备,工,工作,4.,流程图结,构,构说明,(1),图示为函,数,数的调用,关,关系,向,下,下为同一,级,级调用,,向,向右为函,数,数内部的,子,子函数调,用,用2),绿色文字,函,函数名(,如,如,function2,)表示该,函,函数是调,用,用流程中,比,比较关键,的,的点3),红底白字,的,的函数名,(,(如,function,)表示和,其,其它层(,如,如,app,和,lib,、,lib,和,driver,、,alsa-driver,和,device-driver,)的接口函,数,数或,kernel,的回调函数,4),蓝色双虚线,为,为函数实参,等,等形式的输,出,出值或函数,返,返回值(如,sun_function,有输出值到,function1,)注释,主函数,(),function1(),function2(),sub_function1(),.(),sun_function.(),function.(),(),function.(),目 录,一、导读,二、,ALSA,架构简介,三、准备工,作,作,四、设备打,开,开过程和数,据,据流程,i.,整体分析,ii.,设备驱动程,序,序,insmod,流程图,iii.,应用程序主,流,流程图,iv.,声卡打开流,程,程图,v.,数据写入流,程,程图,五、,ALSA,其它形式的,数,数据写入方,法,法流程图,四、设备打,开,开过程和数,据,据流程,i.,整体分析,user,space,kernel,space,app 1,app n,ALSA,应用程序,ALSA-lib,pcm,dmix,control,timer,ALSA-driver,内核,API,设备驱动,hardware,ens1371,声卡芯片的,硬,硬件驱动程,序,序实际上是,alsa-driver,的一部分,,但,但是在本文,档,档中,为了,明,明示层次关,系,系,将这两,个,个分开对待,。

将硬件驱,动,动程序叫做,device-driver(,设备驱动,),,,alsa-driver,的其它部分,叫,叫做,alsa-driver(alsa,驱动,),硬件驱动,被,被,insmod,后,应用,程,程序就可,以,以调用,ALSA-lib,的,API,函数播放,声,声音左,图,图是从应,用,用程序开,始,始,到我,们,们的编写,设,设备驱动,程,程序的调,用,用过程从,从应用程,序,序角度看,,,,,ASLA,的操作分,为,为两部分,,,,打开及,关,关闭是一,部,部分,写,入,入数据是,另,另一部分,当声卡,name,使用,”default,”,”,时,,pcm,作为,dmix,的从设备,存,存在,应,用,用程序直,接,接和,dmix,的相关函,数,数打交道,dmix,混合数据,后,后,直接,写,写到,mmap,映射的地,址,址中关于,1371,的驱动,ens1371-playback.ko,,参见,Linux ALSA,声卡驱动,开,开发最佳,实,实践,.pptx,从设备,驱,驱动程序,角,角度看,,声,声卡核心,驱,驱动可以,分,分为三个,主,主要部分,:,:,(1),模块初始,化,化和退出,部,部分。

2),播放以及,停,停止部分,3),中断处理,部,部分而从应用,程,程序的角,度,度向下看,这三部分,分,分别在,insmod,、打开声,卡,卡和写入,数,数据时被,关,关联目 录,一、导读,二、,ALSA,架构简介,三、准备,工,工作,四、设备,打,打开过程,和,和数据流,程,程,i.,整体分析,ii.,设备驱动,程,程序,insmod,流程图,iii.,应用程序,主,主流程图,iv.,声卡打开,流,流程图,v.,数据写入,流,流程图,五、,ALSA,其它形式,的。

下载提示
相似文档
正为您匹配相似的精品文档