Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介
ALSA声卡驱动:
1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介
2.Linux ALSA声卡驱动之二:Platform
3. Linux ALSA声卡驱动之三:Platform之Cpu_dai
4. Linux ALSA声卡驱动之四:Codec 以及Codec_dai
5.Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册
6.Linux ALSA声卡驱动之六:PCM的注册流程
7.Linux ALSA声卡驱动之七:录音(Capture) 调用流程
一. ALSA 简介
ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。
在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。
用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能
Kernel-4.4/sound/core该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分。
Kernel-4.4/sound/soc 针对system-on-chip体系的中间层代码
1.2 ALSA驱动代码文件结构
sound
/aoa 苹果主板驱动
/arm arm架构相关驱动
/atmel atmel设备驱动
/core 该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分
/drivers 不同架构中一些驱动共享文件放置一些与CPU、BUS架构无关的公用代码
/i2c ALSA自己的I2C控制代码
/isa isa声卡的上层模块
/mips MIPS声卡设备驱动
/oos oos架构
/parisc gsc声卡驱动
/pci pci声卡
/ppc powerPC架构有关
/sh SUPERH声卡驱动
/soc system-on-chip
/sparc Sparc声卡驱动
/synth synth中间层
/usb usb-audio驱动
从上面驱动代码结构中我们可以知道,我们主要关心core和soc文件夹里面的代码
1.3 ALSA设备文件结构
1.3.1 /dev/snd ls -l
crw-rw---- 1 system audio 14, 12 2020-03-09 06:40 adsp
crw-rw---- 1 system audio 14, 4 2020-03-09 06:40 audio
crw-rw---- 1 system audio 116, 2 2020-03-09 06:40 controlC0
crw-rw---- 1 system audio 14, 3 2020-03-09 06:40 dsp
crw-rw---- 1 system audio 14, 0 2020-03-09 06:40 mixer
crw-rw---- 1 system audio 116, 3 2020-03-09 06:40 pcmC0D0p
crw-rw---- 1 system audio 116, 19 2020-03-09 06:40 pcmC0D10c
crw-rw---- 1 system audio 116, 20 2020-03-09 06:40 pcmC0D11p
crw-rw---- 1 system audio 116, 21 2020-03-09 06:40 pcmC0D12p
crw-rw---- 1 system audio 116, 22 2020-03-09 06:40 pcmC0D13c
crw-rw---- 1 system audio 116, 23 2020-03-09 06:40 pcmC0D14c
crw-rw---- 1 system audio 116, 24 2020-03-09 06:40 pcmC0D15p
crw-rw---- 1 system audio 116, 25 2020-03-09 06:40 pcmC0D16c
crw-rw---- 1 system audio 116, 26 2020-03-09 06:40 pcmC0D17c
crw-rw---- 1 system audio 116, 28 2020-03-09 06:40 pcmC0D18c
crw-rw---- 1 system audio 116, 27 2020-03-09 06:40 pcmC0D18p
crw-rw---- 1 system audio 116, 29 2020-03-09 06:40 pcmC0D19p
crw-rw---- 1 system audio 116, 4 2020-03-09 06:40 pcmC0D1c
crw-rw---- 1 system audio 116, 30 2020-03-09 06:40 pcmC0D20p
crw-rw---- 1 system audio 116, 31 2020-03-09 06:40 pcmC0D21p
crw-rw---- 1 system audio 116, 35 2020-03-09 06:40 pcmC0D22c
crw-rw---- 1 system audio 116, 34 2020-03-09 06:40 pcmC0D22p
crw-rw---- 1 system audio 116, 37 2020-03-09 06:40 pcmC0D23c
crw-rw---- 1 system audio 116, 36 2020-03-09 06:40 pcmC0D23p
crw-rw---- 1 system audio 116, 38 2020-03-09 06:40 pcmC0D24p
crw-rw---- 1 system audio 116, 6 2020-03-09 06:40 pcmC0D2c
crw-rw---- 1 system audio 116, 5 2020-03-09 06:40 pcmC0D2p
crw-rw---- 1 system audio 116, 8 2020-03-09 06:40 pcmC0D3c
crw-rw---- 1 system audio 116, 7 2020-03-09 06:40 pcmC0D3p
crw-rw---- 1 system audio 116, 10 2020-03-09 06:40 pcmC0D4c
crw-rw---- 1 system audio 116, 9 2020-03-09 06:40 pcmC0D4p
crw-rw---- 1 system audio 116, 12 2020-03-09 06:40 pcmC0D5c
crw-rw---- 1 system audio 116, 11 2020-03-09 06:40 pcmC0D5p
crw-rw---- 1 system audio 116, 14 2020-03-09 06:40 pcmC0D6c
crw-rw---- 1 system audio 116, 13 2020-03-09 06:40 pcmC0D6p
crw-rw---- 1 system audio 116, 16 2020-03-09 06:40 pcmC0D7c
crw-rw---- 1 system audio 116, 15 2020-03-09 06:40 pcmC0D7p
crw-rw---- 1 system audio 116, 17 2020-03-09 06:40 pcmC0D8p
crw-rw---- 1 system audio 116, 18 2020-03-09 06:40 pcmC0D9p
crw-rw---- 1 system audio 116, 1 2020-03-09 06:40 seq
crw-rw---- 1 system audio 14, 1 2020-03-09 06:40 sequencer
crw-rw---- 1 system audio 14, 8 2020-03-09 06:40 sequencer2
crw-rw---- 1 system audio 116, 33 2020-03-09 06:40 timer
controlC0 --> 用于声卡的控制,例如通道选择,混音,麦克风的控制等
midiC0D0 --> 用于播放midi音频
pcmC0D10c --〉 用于录音的pcm设备:pcm:pcm设备 ,C0:声卡号0,一般设备就一个声卡 D10 设备号是10 c:capture 录音 如果是p:play 播放 。
pcmC0D11p --〉 用于播放的pcm设备
seq --〉 音序器
timer --〉 定时器
1.3.2 /sys/devices/platform/soc-audio ls -l
drwxr-xr-x 3 root root 0 2020-03-09 06:40 DEEP_BUFFER_DL_OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 DL1AWBCAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Capturedrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Playbackdrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_MRG_TXdrwxr-xr-x 3 root root 0 2020-03-09 06:40 HDMI_OUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 HP_IMPEDANCEdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0DL1OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0_AWB_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXCAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia1drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia2drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia3drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia_DL2drwxr-xr-x 3 root root 0 2020-03-09 06:40 PLATOFRM_CONTROLdrwxr-xr-x 3 root root 0 2020-03-09 06:40 TDM_Debug_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 ULDLOOPBACKdrwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_PLAYBACKdrwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1_BTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2_BTlrwxrwxrwx 1 root root 0 2020-03-09 08:27 driver -> ../../../bus/platform/drivers/soc-audiodrwxr-xr-x 2 root root 0 2020-03-09 06:40 powerdrwxr-xr-x 3 root root 0 2020-03-09 06:40 soundlrwxrwxrwx 1 root root 0 2020-03-09 08:27 subsystem -> ../../../bus/platform
DEEP_BUFFER_DL_OUTPUT 设备名称,对于mtk平台来说是在mtk-soc-machine.c mt_soc_dai_common 数组中定义。
1.3.3 /proc/asound/card0 查看声卡0下面挂载的设备
id pcm10c pcm13c pcm16c pcm18p pcm20p pcm22p pcm24p pcm3c pcm4p pcm6c pcm7p
oss_mixer pcm11p pcm14c pcm17c pcm19p pcm21p pcm23c pcm2c pcm3p pcm5c pcm6p pcm8p
pcm0p pcm12p pcm15p pcm18c pcm1c pcm22c pcm23p pcm2p pcm4c pcm5p pcm7c pcm9p
- 1.3.3.1查看具体pcm设备的信息
cd pcm10c
ls
info sub0 xrun_debug
cat info
card: 0
device: 10
subdevice: 0
stream: CAPTURE
id: DL1_AWB_Record mt-soc-codec-dl1awb-dai-10
name:
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
1.3.4 /proc/asound/
MultiMedia1_PLayback mt-soc-codec-tx-dai-0 : : playback 1
-- MultiMedia1_PLayback:对应mt_soc_dai_common 里面的stream_name
-- mt-soc-codec-tx-dai:对应mt_soc_dai_common 里面的codec_dai_name
-- -0 :对应mt_soc_dai_common 数组的顺序
--playback:此pcm是playback类型(播放)
--capture:此pcm是capture类型(录音)
--1 :snd_card下面顺序挂载的第几个pcm设备 ,tinycap -D 0 -d 1 -D 0 表示:声卡0 ,-d 1 表示录音的pcm设备是1号,d是device首字母。
二. ASOC 简介
ASoC把音频系统同样分为3大部分:Machine,Platform和Codec
Platform 一般是指某一个SoC平台,比如MT6582, MT6595, MT6752等等,与音频相关的通常包含该SoC中的Clock、FAE、I2S、DMA等等,该模块负责DMA的控制和I2S的控制, 由CPU厂商负责编写此部分代码。
以上三部分还可以细分:
- platform:platform+cpu_dai
- codec:codec+codec+codec_dai
Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介相关推荐
- Linux的声卡驱动中ALSA与OSS的区别和简单流程介
在声卡的驱动中一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构).OSS是一个商业声卡驱动程序,需要花钱购买.一般我们现在使用的是ALSA的声音架构. Advanced Linux ...
- Linux ALSA声卡驱动之八:ASoC架构中的Platform
1. Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...
- Linux ALSA声卡驱动之四:Codec 以及Codec_dai
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之二:Platform
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之三:Platform之Cpu_dai
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之七:录音(Capture) 调用流程
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- linux alsa声卡驱动原理分析- 设备打开过程和数据流程,linux alsa声卡驱动原理分析解析- 设备打开过程跟数据流程资料.ppt...
linux alsa声卡驱动原理分析解析- 设备打开过程跟数据流程资料 Linux ALSA声卡驱动原理分析 -设备打开过程和数据流程;目 录;目 录;一.导 读;目 录;二.ALSA架构简介;二. ...
- Linux(RedHat9.0)下Alsa声卡驱动的安装
自从装来RedHat9.0就没有听到过声音,也不知道安装了多少次声卡驱动,每种都试验过,都没有成功过,今天终于安装成功,需要的朋友可以参考一下. 首先查看一下,系统声音是否打开,有些朋友电脑没有声音, ...
最新文章
- 如何将cocos2d-x程序分别移植到ios,android,windowsphone三个手机平台上
- SAP MM 由于没有维护Plant的Address信息导致不能在ME51N和ME21N界面里输入工厂代码
- SpringMvc CharacterEncodingFilter 解析 encoding 参数并初始化参数
- 第三方软件源_两款电视盒子软件。涵盖电视直播,电影,电视剧,你值得拥有。...
- python中的进程池Pool
- 相机下载_佳能相机如何连接手机传输相片,视频?
- Adobe MasterCollection CS5 试用版下载链接
- android的toogleButton和switch的使用方法
- use tool wget for windows download
- python中用来抛出异常的关键字是( )_python异常抛出
- 在O(1)的时间内删除链表节点
- (HDRP)全局光照技术初探(一)-光照模式与阴影技术
- 刷题42-m升水倒入n个杯子(动态规划)
- UE_GPU Driven Pipeline Mesh Shader(meshlet)
- 实战NLP beginner任务一:基于机器学习的文本分类
- matlab 怎麼卸載乾淨,matlab set gca用法
- python爬取酷狗音乐top500及歌词_爬取酷狗音乐Top500(示例代码)
- 苹果公司不给iPhone配大电池的原因
- CVPR 2020 | 旷视研究院提出数据不确定性算法 DUL,优化人脸识别性能
- 高等数学:第五章 定积分(4) 定积分的换元法
热门文章
- Json 错误com.fasterxml.jackson.databind.exc.MismatchedInputException:Cannot construct instance of
- centos7升级gcc版本,无需手动下载源码编译
- 紫禁繁花服务器维护,各种坑的坑。
- json文件访问404错误
- 如何自己计算机硬盘故障,新手怎么快速学习电脑打字 电脑硬盘出现错误怎么办...
- 树莓派4B散热片及九层亚克力外壳的正确打开方式
- h5移动端vue手势插件,元素图片缩放、旋转拖拉拖拽手势事件
- 实例变量与成员变量的区别
- Internet Explorer中的潘多拉魔盒 作者:江海 (转)
- MySQL 8.0.31 新增支持SQL标准中的交集(INTERSECT)和差集(EXCEPT)表操作符