一.  概述

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。

在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

图 1.1   alsa的软件体系结构

由图1.1可以看出,用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能。本系列博文仅对嵌入式系统中的alsa-driver和alsa-soc进行讨论。

二.  ALSA设备文件结构

我们从alsa在linux中的设备文件结构开始我们的alsa之旅. 看看我的电脑中的alsa驱动的设备文件结构:

$ cd /dev/snd

$ ls -l

crw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0

crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0

crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0c

crw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0p

crw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1p

crw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seq

crw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer

$

我们可以看到以下设备文件:controlC0 -->                 用于声卡的控制,例如通道选择,混音,麦克风的控制等

midiC0D0  -->                用于播放midi音频

pcmC0D0c --〉               用于录音的pcm设备

pcmC0D0p --〉               用于播放的pcm设备

seq  --〉                        音序器

timer --〉                       定时器

其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。从上面的列表可以看出,我的声卡下挂了6个设备,根据声卡的实际能力,驱动实际上可以挂上更多种类的设备,在include/sound/core.h中,定义了以下设备类型:

#define SNDRV_DEV_TOPLEVEL  ((__force snd_device_type_t) 0)

#define SNDRV_DEV_CONTROL   ((__force snd_device_type_t) 1)

#define SNDRV_DEV_LOWLEVEL_PRE  ((__force snd_device_type_t) 2)

#define SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000)

#define SNDRV_DEV_PCM       ((__force snd_device_type_t) 0x1001)

#define SNDRV_DEV_RAWMIDI   ((__force snd_device_type_t) 0x1002)

#define SNDRV_DEV_TIMER     ((__force snd_device_type_t) 0x1003)

#define SNDRV_DEV_SEQUENCER ((__force snd_device_type_t) 0x1004)

#define SNDRV_DEV_HWDEP     ((__force snd_device_type_t) 0x1005)

#define SNDRV_DEV_INFO      ((__force snd_device_type_t) 0x1006)

#define SNDRV_DEV_BUS       ((__force snd_device_type_t) 0x1007)

#define SNDRV_DEV_CODEC     ((__force snd_device_type_t) 0x1008)

#define SNDRV_DEV_JACK          ((__force snd_device_type_t) 0x1009)

#define SNDRV_DEV_LOWLEVEL  ((__force snd_device_type_t) 0x2000)

通常,我们更关心的是pcm和control这两种设备。

三.  驱动的代码文件结构

在Linux2.6代码树中,Alsa的代码文件结构如下:

sound

/core

/oss

/seq

/ioctl32

/include

/drivers

/i2c

/synth

/emux

/pci

/(cards)

/isa

/(cards)

/arm

/ppc

/sparc

/usb

/pcmcia /(cards)

/oss

/soc

/codecscore               该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分

core/oss        包含模拟旧的OSS架构的PCM和Mixer模块

core/seq        有关音序器相关的代码

include          ALSA驱动的公共头文件目录,该目录的头文件需要导出给用户空间的应用程序使用,通常,驱动模块私有的头文件不应放置在这里

drivers           放置一些与CPU、BUS架构无关的公用代码

i2c                 ALSA自己的I2C控制代码

pci                 pci声卡的顶层目录,子目录包含各种pci声卡的代码

isa                 isa声卡的顶层目录,子目录包含各种isa声卡的代码

soc                针对system-on-chip体系的中间层代码

soc/codecs    针对soc体系的各种codec的代码,与平台无关

linux alsa声卡命令,Linux ALSA声卡驱动之一:ALSA架构简介相关推荐

  1. linux新建自定义命令,Linux 创建自定义命令

    Linux 创建自定义命令 Linux 可以创建自定义使用命令 这里我们采取使用"alias"命令.这里我们首先了解两个文件,通过这两个文件我们可以根据环境配置相应的自定义命令. ...

  2. linux shell 未找到命令,未找到linux问题setenv命令(linux issue setenv command not found)

    未找到linux问题setenv命令(linux issue setenv command not found) 我在Linux中开发了一个Tcl / Tk脚本工具. 为了运行该工具,每次需要在she ...

  3. linux alsa声卡命令,Linux ALSA声卡介绍及使用

    一. 介绍 ALSA 标准是一个先进的linux声音体系.它包含内核驱动集合,API库和工具对Linux声音进行支持.ALSA 包含一系列内核驱动对不同的声卡进行支持,还提供了libasound的AP ...

  4. linux查看声卡命令,Linux查看声卡信息

    查看系统版本 ~$ uname -a Linux laptop 2.6.27-7-generic #1 SMP Tue Nov 4 19:33:20 UTC 2008 i686 GNU/Linux 查 ...

  5. linux 声音控制 命令,linux 声音大小调整的命令

    alsamixer 输入上面的命令 回车即可看到图形界面,界面如下 ┌──────────────────────────── AlsaMixer v1.0.27.1 ──────────────── ...

  6. linux系统print命令,linux常用命令 print格式输出

    格式化输出命令 printf '输出类型 输出格式' 输出内容 输出类型: %ns 输出字符串,n是数字指代输出的几个字符 %ni 输出整数,n是数字指代输出几个数字 %m.nf 输出浮点数.m和n是 ...

  7. linux 安装删除命令,Linux如何使用命令行卸载安装包

    导读 严格地说,Linux是内核.Linux发行版由Linux内核.安装脚本.shell.编译器.桌面和其他组件组成.因此,卸载包或软件的Linux命令取决于Linux发行版的名称和类型.本文说明如何 ...

  8. linux下dump命令,Linux dump命令

    # Linux dump命令 [![Linux 命令大全](/images/1590082124592.gif "Linux 命令大全") Linux 命令大全](/queryGr ...

  9. linux的编程命令,linux编程常用命令

    学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...

最新文章

  1. WorldWind Java 版学习:8、事件响应
  2. [云炬创业基础笔记]第七张创业团队测试3
  3. CVPR 2018 《High-speed Tracking with Multi-kernel Correlation Filters》论文笔记
  4. 'telnet' 不是内部或外部命令,也不是可运行的程序
  5. 怎么查看eclipse的版本号
  6. kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?
  7. 富爸爸系列 -- 《财务自由》学习笔记之三
  8. Java基础学习总结(114)——System之系统变量和环境变量
  9. 公有链、私有链、联盟链、许可链,这些区块链又分别代表着什么意思?
  10. Cognitive Radio Technology认知无线电技术简述
  11. 信息系统基础知识---企业信息化与电子商务
  12. 罗马音平假名中文可复制_200个中文常见姓氏的日语发音,再也不愁起日文名字啦!...
  13. 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)...
  14. 脱胎于沃尔沃的Polestar 2浮出水面,它真能挑战Model 3吗?...
  15. maven 通过打包命令指定不同环境配置文件
  16. 7.20黄金多空依旧反复,原油依然窄幅震荡今日能否突破
  17. 手机充电越充越慢?原来这些习惯能将快充拖为慢充!
  18. nuxt使用antv-l7踩坑
  19. Word 多级列表-下级编号不跟随上级编号怎么办?
  20. vscode markdown preview enhance 插件 pdf 导出

热门文章

  1. LeetCode 322. 零钱兑换(DP)
  2. python桌面快捷图标_Python创建、删除桌面、启动组快捷方式的例子分享
  3. java 工厂模式的写法_java工厂模式三种详解
  4. 正则邮箱_自己写一个通用的邮箱正则表达式
  5. 机器学习非监督学习—k-means及案例分析
  6. python中的iter()函数与next()函数
  7. 知识图谱入门知识(二)事件抽取(EE)详细介绍
  8. 模型训练慢和显存不够怎么办?GPU加速混合精度训练
  9. Step-by-step to LSTM: 解析LSTM神经网络设计原理
  10. 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践