alsa软件结构的一点理解 1,alsa的基本软件结构
alsa app
--------------------
alsa lib
--------------------
alsa driver
--------------------
alsa device driver
linux下软件模块架构的一些重要特点:
1),对应用层提供了经过高度抽象的接口,使得可以支持非常
多的应用,可以支持现存的许多应用软件,同时方便应用开发;
2),向下支持非常多的设备驱动,设备驱动一般只需要实现模块定义
的一些接口即可,同样这些设备驱动相对容易开发;
以上特点不难在network subsystem/tty subsystem/usb subsystem
...等发现. alsa 同样保持了这些特点,alsa app调用alsa lib提供的接口,
这些接口的核心内容并不复杂; alsa lib和alsa driver作为整个模块的
中间层,对sound接口做了相当完备的抽象.上面的alsa app只需要集中注意力
到应用逻辑,下层的alsa device driver也只需要关注如何实现alsa driver
要求的接口.
注:
从历史上来说,Gentoo提供了两种方法可以使ALSA运行在您的系统上:
内核自带的驱动和外部的
alsa-driver软件包。这两种方案基本上完成的是同一项任务;这使得提供对外部软件包的支持异常困难和耗时。Gentoo维护者决定不再继续对
alsa-driver软件包进行支持,而是将他们的资源集中在Linux内核中的ALSA驱动部分。
2,alsa lib中pcm是如何组织的
alsa lib pcm部分提供了许多pcm plugin,比如Plugin: hw/Plugin: copy/
Plugin: Route/Plugin: Rate/Plugin: file/...等. 这些plugin的提供大大
方便了alsa app的开发. 这些众多的plugin中,只有Plugin: hw和alsa driver
打交道,其他Plugin只需要和Plugin:hw打交道即可.
一般alsa app访问的设备名称为 plughw:x,y/hw:x,y/...等类似名称,这些
名称在alsa lib层一般都会转化到hw:x,y设备, 最终转化为/dev/snd/pcmCxDyc
以及/dev/snd/pcmCxDyc等类似设备.
注:
插入蓝牙的btsco.ko生成了(udevd在后台运行)
在/dev下生成了dsp1 audio1 mixer1
同时在/dev/snd下生成了
0 crw-rw---- 1 root audio 116, 48 Apr 2 2009 pcmC1D0p
0 crw-rw---- 1 root audio 116, 56 Apr 2 2009 pcmC1D0c
0 crw-rw---- 1 root audio 116, 36 Apr 2 2009 hwC1D0
0 crw-rw---- 1 root audio 116, 32 Apr 2 2009 controlC1
3,alsa driver中pcm是如何组织的
snd module(pcm_native.c)提供了alsa lib需要的接口,这些接口的表现形式
---标准linux system call.
4,一些结论
用户所要开发的软件模块一定只依赖于系统提供的支撑模块,系统支持模块只可以依赖
其他系统支撑模块,绝对不可以依赖于用户模块. 这条规则看起来很直观.
从上面可以看出,用户模块的arrow都是指向其他模块的. 无论是alsa app,还是alsa dev
driver.
snd_pcm/snd/snd_timer/snd_page_alloc/snd_ac97_codec/snd_ac97_bus等模块构成了
alsa driver中间层的主体,对sound接口从逻辑上做了抽象.
阅读(1819) | 评论(0) | 转发(0) |