概述
文章目录
- 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驱动之简单介绍audio驱动原理概述audio驱动中的一些术语以及概念查看声卡设备的一些常用命令audio驱动加载顺序的全部内容,希望文章能够帮你解决audio驱动之简单介绍audio驱动原理概述audio驱动中的一些术语以及概念查看声卡设备的一些常用命令audio驱动加载顺序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复