Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1028534
  • 博文数量: 166
  • 博客积分: 10217
  • 博客等级: 上将
  • 技术积分: 2133
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 19:45
文章分类

全部博文(166)

文章存档

2012年(3)

2011年(7)

2010年(18)

2009年(59)

2008年(79)

我的朋友

分类: LINUX

2009-04-02 15:01:08

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接口从逻辑上做了抽象.                    
阅读(1756) | 评论(0) | 转发(0) |
0

上一篇:blue

下一篇:Gentoo Linux ALSA指南

给主人留下些什么吧!~~