audio驱动之简单介绍
文章目录
- audio驱动原理概述
- audio驱动中的一些术语以及概念
- 查看声卡设备的一些常用命令
- <1>查看声卡的设备文件
- <2>查看声卡0下面挂载的设备
- <3>查看某个具体pcm设备的信息
- <4>查看注册的所有pcm设备的设备名称
- audio驱动加载顺序
audio驱动原理概述
ASoC
被分为 Machine
, Platform
和 Codec
三大部件,Platform
驱动的主要作用是完成音频数据的管理, 最终通过 CPU
的 数字音频接口(DAI) 把音频数据传送给 Codec
进行处理,最终由 Codec
输出音频信号给耳机或者是喇叭。 在具体实现上, ASoC
又把 platform
驱动分为两个部分: snd_soc_platform_driver
和 snd_soc_dai_driver
。其中, platform_driver
负责管理音频数据,把音频数据通过 dma
或 其他操作传送至 cpu dai
中, dai_driver
则主要完成 cpu
一侧的 dai
的参数配置, 同时也会通过一定的途径把必要的 dma
等参数与 snd_soc_platform_driver
进行交互。
audio驱动中的一些术语以及概念
- platform: 一般是指某一个
SoC
平台,比如MTK,QCOM
等平台,与音频相关的通常包含该SoC
中的Clock、I2S、DMA
等等,一般由CPU厂商负责提供此部分的代码。platform
又可以细分为两个部分:
- cpu_dai:在嵌入式系统里面通常指
soc
的I2S、PCM
总线控制器,负责把音频数据从I2S TX FIFO
搬运到CODEC
(这里是播放的情形,录制则相反)。cpu_dai
通过snd_soc_register_dai
来注册。嵌入式系统中一般是I2S
和PCM
接口。- pcm_dma:负责把
dma_buffer
中的音频数据搬运到I2S TX FIFO
。值得留意的是:某些情形下是不需要dma
操作的,比如modem
和codec
直连,因为modem·本身已经把数据送到
FIFO`了,这时只需启动
platform_dai(cpu_dai):连接
platform
和machine
;codec :字面上的意思就是编解码器,在播放音频的过程中,将传输过来的经过采样量化成数字信号的音频数据,通过
DAC
转换成模拟信号,然后输出到喇叭或者耳机,让我们可以听到声音。Codec
里面包含了I2S接口、DAC、ADC、Mixer、PA(功放)
,通常包含多种输入(Mic、Line-in、I2S、PCM)
和多个输出(耳机、喇叭、听筒,Line-out)
,Codec
和Platform
一样,是可重用的部件。这个模块由codec厂商负责提供此部分的代码。codec_dai:连接
codec
和machine
;machine:指某款机器,比如智能手机,通过配置
dai_link
把cpu_dai、codec_dai、modem_dai
各个音频接口给链结成一条条音频链路,然后注册snd_soc_card
。和上面两个不一样,Platform
和CODEC
驱动一般是可以重用的,而machine
有它特定的硬件特性,几乎是不可重用的 。所谓的硬件特性指:soc platform
与codec
的差异;DAIs
之间的链结方式;通过某个GPIO
打开Amplifier
;通过某个GPIO
检测耳机插拔;使用某个时钟如MCLK/External-OSC
作为I2S、CODEC
的时钟源等。dai_link :
machine
驱动中定义的音频数据链路,它指定链路用到的codec、codec_dai、cpu_dai、platform
。一个系统可能有多个音频数据链路,比如media
和voice
,因此可以定义多个dai_link
。PCM :
PCM(Pulse-code modulation)
是脉冲编码调制,PCM
信号的两个重要指标是采样频率 和 量化精度 ,目前,CD音频的采样频率通常为44100Hz
,量化精度是16bit
。播放音乐时,应用程序从存储介质中读取音频数据(MP3、WMA、AAC…),经过解码后,最终送到音频驱动程序中的就是PCM
数据;在录音时,音频驱动不停地把采样所得的PCM
数据送回给应用程序,由应用程序完成压缩、存储等任务。所以,音频驱动的两大核心任务就是:
- playback:如何把用户空间的应用程序发过来的
PCM
数据,转化为人耳可以辨别的模拟音频信号- capture:把
mic
拾取到的模拟信号,经过采样、量化,转换为PCM
数据送回给用户空间
音频驱动主要实现一下3个部分的功能:
(1)播放声音(playback)
(2)录音(capture)
(3)声音控制(control)
运行adb shell ls -l /dev/snd
,我们可以看到当前平台注册的声卡驱动设备。
主要分为以下几类:
pcmCxDxp —— Playback
pcmCxDxc —— Capture
controlC0 —— Control,比如各种音频控件开关、音量增益等
查看声卡设备的一些常用命令
<1>查看声卡的设备文件
ls -l /dev/snd
crw-rw---- 1 system audio 116, 2 2020-04-22 22:05 controlC0
crw-rw---- 1 system audio 116, 3 2020-04-22 22:05 pcmC0D0p
crw-rw---- 1 system audio 116, 17 2020-04-22 22:05 pcmC0D10p
crw-rw---- 1 system audio 116, 18 2020-04-22 22:05 pcmC0D11p
crw-rw---- 1 system audio 116, 19 2020-04-22 22:05 pcmC0D12c
crw-rw---- 1 system audio 116, 20 2020-04-22 22:05 pcmC0D13c
crw-rw---- 1 system audio 116, 21 2020-04-22 22:05 pcmC0D14p
crw-rw---- 1 system audio 116, 22 2020-04-22 22:05 pcmC0D15c
crw-rw---- 1 system audio 116, 23 2020-04-22 22:05 pcmC0D16c
crw-rw---- 1 system audio 116, 25 2020-04-22 22:05 pcmC0D17c
crw-rw---- 1 system audio 116, 24 2020-04-22 22:05 pcmC0D17p
crw-rw---- 1 system audio 116, 27 2020-04-22 22:05 pcmC0D18c
crw-rw---- 1 system audio 116, 26 2020-04-22 22:05 pcmC0D18p
crw-rw---- 1 system audio 116, 28 2020-04-22 22:05 pcmC0D19p
crw-rw---- 1 system audio 116, 4 2020-04-22 22:05 pcmC0D1c
crw-rw---- 1 system audio 116, 29 2020-04-22 22:05 pcmC0D20p
crw-rw---- 1 system audio 116, 30 2020-04-22 22:05 pcmC0D21p
crw-rw---- 1 system audio 116, 31 2020-04-22 22:05 pcmC0D22c
crw-rw---- 1 system audio 116, 34 2020-04-22 22:05 pcmC0D23p
crw-rw---- 1 system audio 116, 35 2020-04-22 22:05 pcmC0D24p
crw-rw---- 1 system audio 116, 37 2020-04-22 22:05 pcmC0D25c
crw-rw---- 1 system audio 116, 36 2020-04-22 22:05 pcmC0D25p
crw-rw---- 1 system audio 116, 39 2020-04-22 22:05 pcmC0D26c
crw-rw---- 1 system audio 116, 38 2020-04-22 22:05 pcmC0D26p
crw-rw---- 1 system audio 116, 40 2020-04-22 22:05 pcmC0D27c
crw-rw---- 1 system audio 116, 42 2020-04-22 22:05 pcmC0D28c
crw-rw---- 1 system audio 116, 41 2020-04-22 22:05 pcmC0D28p
crw-rw---- 1 system audio 116, 43 2020-04-22 22:05 pcmC0D29p
crw-rw---- 1 system audio 116, 6 2020-04-22 22:05 pcmC0D2c
crw-rw---- 1 system audio 116, 5 2020-04-22 22:05 pcmC0D2p
crw-rw---- 1 system audio 116, 45 2020-04-22 22:05 pcmC0D30c
crw-rw---- 1 system audio 116, 44 2020-04-22 22:05 pcmC0D30p
crw-rw---- 1 system audio 116, 47 2020-04-22 22:05 pcmC0D31c
crw-rw---- 1 system audio 116, 46 2020-04-22 22:05 pcmC0D31p
crw-rw---- 1 system audio 116, 48 2020-04-22 22:05 pcmC0D32c
crw-rw---- 1 system audio 116, 8 2020-04-22 22:05 pcmC0D3c
crw-rw---- 1 system audio 116, 7 2020-04-22 22:05 pcmC0D3p
crw-rw---- 1 system audio 116, 9 2020-04-22 22:05 pcmC0D4p
crw-rw---- 1 system audio 116, 11 2020-04-22 22:05 pcmC0D5c
crw-rw---- 1 system audio 116, 10 2020-04-22 22:05 pcmC0D5p
crw-rw---- 1 system audio 116, 13 2020-04-22 22:05 pcmC0D6c
crw-rw---- 1 system audio 116, 12 2020-04-22 22:05 pcmC0D6p
crw-rw---- 1 system audio 116, 14 2020-04-22 22:05 pcmC0D7p
crw-rw---- 1 system audio 116, 15 2020-04-22 22:05 pcmC0D8p
crw-rw---- 1 system audio 116, 16 2020-04-22 22:05 pcmC0D9c
crw-rw---- 1 system audio 116, 1 2020-04-22 22:05 seq
crw-rw---- 1 system audio 14, 1 2020-04-22 22:05 sequencer
crw-rw---- 1 system audio 14, 8 2020-04-22 22:05 sequencer2
crw-rw---- 1 system audio 116, 33 2020-04-22 22:05 timer
<2>查看声卡0下面挂载的设备
ls -l /proc/asound/card0
-r--r--r-- 1 root root 0 2020-04-23 05:00 id
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm0p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm10p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm11p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm12c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm13c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm14p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm15c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm16c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm17c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm17p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm18c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm18p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm19p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm1c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm20p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm21p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm22c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm23p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm24p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm25c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm25p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm26c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm26p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm27c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm28c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm28p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm29p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm2c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm2p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm30c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm30p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm31c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm31p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm32c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm3c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm3p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm4p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm5c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm5p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm6c
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm6p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm7p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm8p
dr-xr-xr-x 3 root root 0 2020-04-23 05:00 pcm9c
<3>查看某个具体pcm设备的信息
cat /proc/asound/card0/pcm0p/info
card: 0
device: 0
subdevice: 0
stream: PLAYBACK
id: MultiMedia1_PLayback mt-soc-codec-tx-dai-0
name:
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
<4>查看注册的所有pcm设备的设备名称
cat /proc/asound/pcm
00-00: MultiMedia1_PLayback mt-soc-codec-tx-dai-0 : : playback 1
00-01: MultiMedia1_Capture mt-soc-codec-rx-dai-1 : : capture 1
00-02: Voice_MD1_PLayback mt-soc-codec-voicemd1-dai-2 : : playback 1 : capture 1
00-03: ULDL_Loopback mt-soc-codec-uldlloopback-dai-3 : : playback 1 : capture 1
00-04: I2S0_PLayback mt-soc-i2s0-dummy-dai-codec-4 : : playback 1
00-05: MRGRX_PLayback mt-soc-mrgrx-dai-codec-5 : : playback 1 : capture 1
00-06: MRGRX_CAPTURE mt-soc-mrgrx-dummy-dai-codec-6 : : playback 1 : capture 1
00-07: I2S0DL1_PLayback mt-soc-codec-I2s0tx-dai-7 : : playback 1
00-08: Deep_Buffer_PLayback mt-soc-codec-deepbuffer-tx-dai-8 : : playback 1
00-09: DL1_AWB_Record mt-soc-codec-dl1awb-dai-9 : : capture 1
00-10: Voice_MD1_BT_Playback mt-soc-codec-voicemd1-bt-dai-10 : : playback 1
00-11: VOIP_Call_BT_Playback mt-soc-codec-voipcall-btout-dai-11 : : playback 1
00-12: VOIP_Call_BT_Capture mt-soc-codec-voipcall-btin-dai-12 : : capture 1
00-13: TDM_Debug_Record mt-soc-tdmrx-dai-codec-13 : : capture 1
00-14: FM_MRGTX_Playback mt-soc-fmmrg2tx-dummy-dai-codec-14 : : playback 1
00-15: MultiMediaData2_Capture mt-soc-codec-rx-dai2-15 : : capture 1
00-16: I2S0AWB_Capture mt-soc-codec-i2s0awb-dai-16 : : capture 1
00-17: Voice_MD2_PLayback mt-soc-codec-voicemd2-dai-17 : : playback 1 : capture 1
00-18: MultiMedia_Routing mt-soc-dummy-dai-codec-18 : : playback 1 : capture 1
00-19: Voice_MD2_BT_Playback mt-soc-codec-voicemd2-bt-dai-19 : : playback 1
00-20: HP_IMPEDANCE_Playback mt-soc-codec-hp-impedance-dai-20 : : playback 1
00-21: FM_I2S_Playback mt-soc-fm-i2s-dai-codec-21 : : playback 1
00-22: FM_I2S_Capture mt-soc-fm-i2s-dummy-dai-codec-22 : : capture 1
00-23: MultiMedia2_PLayback mt-soc-codec-tx-dai2-23 : : playback 1
00-24: MultiMedia3_PLayback mt-soc-codec-offload-dai-24 : : playback 1
00-25: BTCVSD_Capture snd-soc-dummy-dai-25 : : playback 1 : capture 1
00-26: BTCVSD_Playback snd-soc-dummy-dai-26 : : playback 1 : capture 1
00-27: ANC_Record mt-soc-dummy-dai-codec-27 : : capture 1
00-28: Voice_USB_PLayback mt-soc-codec-voiceusb-dai-28 : : playback 1 : capture 1
00-29: Voice_USB_EchoRef mt-soc-codec-voiceusb-echoref-dai-29 : : playback 1
00-30: Headphone_PLayback snd-soc-dummy-dai-30 : : playback 1 : capture 1
00-31: Speaker_PLayback snd-soc-dummy-dai-31 : : playback 1 : capture 1
00-32: I2S2ADC2_Capture snd-soc-dummy-dai-32 : : capture 1
audio驱动加载顺序
[0.404894] .(0)[1:swapper/0][snd] sound.c: alsa_sound_init
[1.197403] .(1)[1:swapper/0][snd] soc-core.c: snd_soc_init
[1.200199] .(1)[1:swapper/0][snd] mtk-soc-pcm-capture.c: mtk_soc_capture_platform_init
[1.212671] .(1)[1:swapper/0][snd] mtk_soc_dai_stub.c: mtk_dai_stub_init
[1.214846] .(1)[1:swapper/0][snd] mtk-soc-machine.c: mt_soc_snd_init
[1.215339] .(1)[1:swapper/0][snd] mtk-soc-codec-6357.c: mtk_mt6357_codec_init
audio驱动之简单介绍相关推荐
- Web Audio API实现简单变声效果
前言 想在网页中实现实时音频变声效果该如何实现呢,之前遇到这种处理音视频的需求,可能会想到需要借助C代码实现.但是现在随着浏览器性能的提升.web API的丰富,通过浏览器原生的API也可以操作音频数 ...
- linux驱动简单介绍
linux驱动简单介绍 驱动基本介绍 驱动.顾名思义就是"驱使硬件设备行动".设备驱动与底层硬件之间打交道,按照硬件设备的具体操作方式来读写设备寄存器,最终完成一系列操作. 设备 ...
- MTD NANDFLASH驱动相关知识介绍
转:http://blog.csdn.net/zhouzhuan2008/article/details/11053877 目录 MTD总概述 MTD数据结构 MTD相关层实现 MTD,Memory ...
- input:file上传类型控制简单介绍
<input type="file">可以上传文件,这个就不用多介绍了. 其实我们使用此控件可以进行上传文件格式的控制. 特别说明:在实际应用中,不但要在前端进行验证, ...
- Linux 下UVCamp;V4L2技术简单介绍(二)
通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...
- Django - Django框架 简单介绍
Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...
- Waveform Audio 驱动(Wavedev2)之:WAV API模拟
Waveform Audio 驱动(Wavedev2)之:WAV API模拟 Waveform 驱动对Windows Mobile来说是一个非常重要的驱动,控制着所有有关声音的操作,包括喇叭.耳机. ...
- WinCE电源管理的简单介绍
电源管理的目的是节能,基本的节能方法是使系统适时的进出休眠状态.比如用户按下On/Off按钮,或者监视用户活动的定时器超时,或者应用呼叫api都可以使得系统休眠,用户再次按下On/Off或者其他唤醒中 ...
- Karplus-Strong 算法简单介绍和实现
Karplus-Strong 算法简单介绍和实现 本文为Coursera数字信号处理课程第一周内容,对相关课程刚兴趣的同学,请参看这里 为了有更好的交互性,本文所有代码均上传至Microsoft Az ...
- NVIDIA芯片组BIOS设置和RAID设置简单介绍
NVIDIA芯片组BIOS设置和RAID设置简单介绍 nForce系列芯片组的BIOS里有关SATA和RAID的设置选项有两处,都在Integrated Peripherals(整合周边)菜单内. S ...
最新文章
- 从业5年,教你学习Linux开发
- c# out原理 ref_3-Unity入门学习之C#基础2「数据类型」
- day18-Map和Collection应用
- python实现mongodb的备份与导入
- Java 多线程(四)—— 单例模式
- 2021- 10 -13 AVL树的平衡调整(有parent指针) 代码逻辑
- vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
- 如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...
- Java中的Math类和日期类详解
- jQuery滚动数字
- jQuery和CSS3炫酷滚动页面内容元素动画特效
- 2021年淮南高考成绩查询,2021年淮南高考最高分多少分,历年淮南高考状元
- python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...
- Dubbo原理和源码解析之服务暴露
- Tableau过期处理方法
- python的三种将整数转换成二进制的方法
- 计算机科学与技术b类大学名单,双一流a类大学和b类大学名单及学科
- Windows Diskpart命令详解
- “蔚来杯“2022牛客暑期多校训练营5 Don‘t Starve
- 2018,灵魂无处安放的一年