linux alsa声卡命令,Linux ALSA声卡驱动之一:ALSA架构简介
一. 概述
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架构简介相关推荐
- linux新建自定义命令,Linux 创建自定义命令
Linux 创建自定义命令 Linux 可以创建自定义使用命令 这里我们采取使用"alias"命令.这里我们首先了解两个文件,通过这两个文件我们可以根据环境配置相应的自定义命令. ...
- linux shell 未找到命令,未找到linux问题setenv命令(linux issue setenv command not found)
未找到linux问题setenv命令(linux issue setenv command not found) 我在Linux中开发了一个Tcl / Tk脚本工具. 为了运行该工具,每次需要在she ...
- linux alsa声卡命令,Linux ALSA声卡介绍及使用
一. 介绍 ALSA 标准是一个先进的linux声音体系.它包含内核驱动集合,API库和工具对Linux声音进行支持.ALSA 包含一系列内核驱动对不同的声卡进行支持,还提供了libasound的AP ...
- linux查看声卡命令,Linux查看声卡信息
查看系统版本 ~$ uname -a Linux laptop 2.6.27-7-generic #1 SMP Tue Nov 4 19:33:20 UTC 2008 i686 GNU/Linux 查 ...
- linux 声音控制 命令,linux 声音大小调整的命令
alsamixer 输入上面的命令 回车即可看到图形界面,界面如下 ┌──────────────────────────── AlsaMixer v1.0.27.1 ──────────────── ...
- linux系统print命令,linux常用命令 print格式输出
格式化输出命令 printf '输出类型 输出格式' 输出内容 输出类型: %ns 输出字符串,n是数字指代输出的几个字符 %ni 输出整数,n是数字指代输出几个数字 %m.nf 输出浮点数.m和n是 ...
- linux 安装删除命令,Linux如何使用命令行卸载安装包
导读 严格地说,Linux是内核.Linux发行版由Linux内核.安装脚本.shell.编译器.桌面和其他组件组成.因此,卸载包或软件的Linux命令取决于Linux发行版的名称和类型.本文说明如何 ...
- linux下dump命令,Linux dump命令
# Linux dump命令 [![Linux 命令大全](/images/1590082124592.gif "Linux 命令大全") Linux 命令大全](/queryGr ...
- linux的编程命令,linux编程常用命令
学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...
最新文章
- WorldWind Java 版学习:8、事件响应
- [云炬创业基础笔记]第七张创业团队测试3
- CVPR 2018 《High-speed Tracking with Multi-kernel Correlation Filters》论文笔记
- 'telnet' 不是内部或外部命令,也不是可运行的程序
- 怎么查看eclipse的版本号
- kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?
- 富爸爸系列 -- 《财务自由》学习笔记之三
- Java基础学习总结(114)——System之系统变量和环境变量
- 公有链、私有链、联盟链、许可链,这些区块链又分别代表着什么意思?
- Cognitive Radio Technology认知无线电技术简述
- 信息系统基础知识---企业信息化与电子商务
- 罗马音平假名中文可复制_200个中文常见姓氏的日语发音,再也不愁起日文名字啦!...
- 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)...
- 脱胎于沃尔沃的Polestar 2浮出水面,它真能挑战Model 3吗?...
- maven 通过打包命令指定不同环境配置文件
- 7.20黄金多空依旧反复,原油依然窄幅震荡今日能否突破
- 手机充电越充越慢?原来这些习惯能将快充拖为慢充!
- nuxt使用antv-l7踩坑
- Word 多级列表-下级编号不跟随上级编号怎么办?
- vscode markdown preview enhance 插件 pdf 导出
热门文章
- LeetCode 322. 零钱兑换(DP)
- python桌面快捷图标_Python创建、删除桌面、启动组快捷方式的例子分享
- java 工厂模式的写法_java工厂模式三种详解
- 正则邮箱_自己写一个通用的邮箱正则表达式
- 机器学习非监督学习—k-means及案例分析
- python中的iter()函数与next()函数
- 知识图谱入门知识(二)事件抽取(EE)详细介绍
- 模型训练慢和显存不够怎么办?GPU加速混合精度训练
- Step-by-step to LSTM: 解析LSTM神经网络设计原理
- 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践