Chinaunix首页 | 论坛 | 博客
  • 博客访问: 796719
  • 博文数量: 172
  • 博客积分: 3836
  • 博客等级: 中校
  • 技术积分: 1988
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-10 14:59
文章分类

全部博文(172)

文章存档

2014年(2)

2013年(1)

2012年(28)

2011年(141)

分类: LINUX

2011-11-10 10:08:08

最近对ALSA架构进行了一点稍微深入的研究,记录如下。

我们的ALSA驱动程序,也就是中间内核层在2.6或以后的LINUX源码里面是有的,但我们还可以通过另外一个途径获得,就是所谓的alsa-driver。后者其实是为了保持与2.6或以后内核的兼容而不断更新的,当然其中包含了更多更细分的文件,以及在开发或尚在测试的附加功能,当这些功能完成且工作稳定时最终都会被移入到alsa内核树中。

下面我们来看一下内核中的源码树,我们开发的alsa驱动也是基于这个内核源码的,没有使用alsa-driver

ALSA文件目录结构:

sound

/core

    /oss

    /seq

       /oss

       /instr

/ioctl132

/include

/drivers

    /mpu401

    /op13

/i2c

    /13

/synth

    /emux

/pci

   /(cards)
    /isa

   /(cards)

/arm

/ppc

/sparc

/usb

/pcmcia/(cards)

/oss

下面我们来看一下具体的目录作用

core目录

这个目录包含了中间层,ALSA的核心驱动。

core/oss

关于PCMmixerOSS模拟的模块保存在这个目录里面。Raw midi OSS模拟也被包含在ALSA rawmidi代码中,因为它非常小。音序器代码被保存在core/seq/oss目录里面

core/ioctl32

这个目录包含32bit-ioctl64bit架构(如x86-64,ppc64,sparc64)的转换。对于32bitalpha的架构,他们是不被编译的。

core/seq

它和它的子目录主要是关于ALSA的音序器。它包含了音序器的core和一些主要的音序器模块如:snd-seq-midisnd-seq-virmidi等等。它们仅仅在内核配置中当CONFIG_SND_SEQUENCER被设定的时候才会被编译。我们在使用的ALSA驱动中也没有使用。

core/seq/oss

包含了OSS音序器的模拟的代码。

core/seq/instr

包含了一些音序器工具层的一些模块。

include目录

这里面放的是ALSA驱动程序开放给用户空间,或者被其他不同目录引用的共同头文件。

Drivers目录

这个目录包含了不同架构的系统中的不同驱动共享的文件部分。它们是硬件无关的。在子目录里面,会放一些不同组件的代码,他们是根据不同的buscpu架构实现的。

i2c目录

这里面包含了ALSAi2c组件。

虽然LINUXi2c的标准协议层,ALSA还是拥有它关于一些card的专用i2c代码,因为一些声卡仅仅需要一些简单的操作,而标准的i2cAPI函数对此显得太过复杂了。

i2c/l3

这是ARM L3 i2c驱动的子目录

synth目录

它包含了synth(合成器)的中间层模块

pci目录

它和它的一些子目录文件负责PCI声卡和一些PCI BUS的上层card模块。

isa目录

它和它的一些子目录文件是处理ISA声卡的上层card模块。

arm,ppc,sparc目录

这里放置一些和芯片架构相关的一些上层的card模块。

usb目录

这里包含一些USB-AUDIO驱动。在最新版本里面,已经把USB MIDI 驱动也集成进USB-AUDIO驱动了。

pcmcia目录

PCMCIA卡,特别是PCCcard驱动会放到这里。CardBus驱动将会放到pci目录里面,因为API函数和标准PCI卡上统一的。

oss目录

ALSA无关。

在了解了相关的目录结构后,我们就开始来分析一下ALSA驱动了,在ALSA驱动中,我们所要从始至终要记住的是,我们的应用程序是不能直接访问驱动的,必须通过中间的ALSA层,因此我么所写的驱动,所提供的接口也是针对中间层的。

下面的内容我们从两个方面来考虑ALSA驱动,一个是驱动在操作硬件的同时,如何为中间层提供接口的,另外一个是应用程序是如何调用ALSAAPI来实现对驱动的连接从而操作硬件的。

这了解这两个方面之前我们先来看一下ALSA的系统组成,也就是我们所说的中间层由哪些方面组成:

n       驱动包alsa-driver:指内核驱动程序,包括硬件相关的代码和一些公共代码,非常庞大

n       开发包alsa-libs:指用户空间的函数库,提供给应用程序使用,应用程序应包括头文件asoundlib.h。并使用共享库libasound.so

n       设置管理工具包alsa-utils:包含一些基于ALSA的用于控制声卡的应用程序,如alsaconf(侦测系统中声卡并写一个适合的ALSA配置文件),aplay(基于命令行的声音文件播放),arecord(基于命令行的声音文件录制)等

n       还包括开发包插件alsa-libplugins,其他声音相关处理小程序包alsa-tools,特殊音频固件支持包alsa-firmwareOSS接口兼容模拟层工具alsa-oss7个子项目,其中只有驱动包是必须的

其实对于驱动包,我们用的是内核自带的,所以我们也没有安装。这个我们在前面已经详细讲解过,不多说了。


转载:http://hi.baidu.com/xdyang1986/blog/item/68baf3c626eacad0d000603e.html

阅读(2195) | 评论(0) | 转发(0) |
0

上一篇:Android的 power managment

下一篇:Firefox快捷键

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