Linux ALSA音频框架分析三:ALSA框架
Linux ALSA音频框架分析三:ALSA框架
一、概述
ALSA 是 Advanced Linux Sound Architecture 的缩写,即高级 Linux声音架构,在 Linux 操作系统上提供了对音频和 MIDI(Musical InstrumentDigital Interface,音乐设备数字化接口)的支持。在 Linux2.6 版本内核以后,ALSA 已经成为默认的声音子系统,用来替换 2.4 版本内核中的OSS(Open Sound System,开放声音系统)。
ALSA 是一个完全开放源码的音频驱动程序集,是由志愿者维护的开源项目,而 OSS 则是由公司提供的商业产品。ALSA 系统包括驱动包alsa-driver(集成在内核源码),开发包 alsa-libs,开发包插件 alsalibplugins,设置管理工具包 alsa-utils,其他声音相关处理小程序包alsa-tools,特殊音频固件支持包 alsa-firmware,OSS 接口兼容模拟层工具 alsa-oss 共 7 个子项目,其中只有 alsa-driver 是必须的。除了 alsa-driver,ALSA 包含在用户空间的 alsa-lib 函数库,具有更加友好的编程接口,并且完全兼容于 OSS,开发者可以通过这些高级 API 使用驱动,不必直接与内核驱动 API 进行交互。
ALSA 主要有如下特点:
1)支持多种声卡设备、
2)模块化的内核驱动程序 、
3)支持 SMP(对称多处理)和多线程、
4)提供应用开发函数库 、
5)兼容 OSS 应用程序 。
二、ALSA 整体框架
ALSA 在 Linux 系统中可以主要分两部分,在Kernel空间的设备驱动层,ALSA 提供了 ALSA-driver,它是整个 ALSA 框架的核心部分;同时在Linux User空间,ALSA 提供了alsa-lib,对 ALSA-driver的系统调用API进行封装,应用程序只要调用 alsa-lib 提供的 API,即可以完成对底层音频硬件的控制。
下图是基于 ALSA框架的Linux音频系统架构图:
2.1 alsa-lib
User空间的 alsa-lib 对应用程序提供统一的 alsa-lib-API 接口,简化了应用程序的实现难度。alsa-lib 主要以 plugin 插件的形式体现。详细信息详见http://www.alsa-project.org/alsa-doc/alsa-lib/ 。
2.2 ALSA-driver
Linux 内核空间中,ALSA-driver 其大致可分为三层:声卡对象描述层、ALSA 核心层 ASLA Core 和 Audio 设备驱动层 Audio device driver。
最上层的是声卡对象描述层,是声卡硬件的抽象描述,是一个虚拟层,用户空间通过这些描述可以得知该声卡硬件的功能、设备组件和操作方法等。
中间层是 ASLA Croe,是 ALSA 的标准框架,是 ALSA-driver 的核心部分,提供了各种音频设备驱动的通用方法和数据结构,为 Audio driver提供 ALSA Driver API。
最底层是 Audio device driver,根据 ALSA-driver 提供的 ALSA Driver API 和相应音频设备的初始化及工作流程,实现具体的功能组件函数,这也是驱动开发人员需要具体实现的部分。
更多推荐
所有评论(0)