我是靠谱客的博主 幽默香烟,这篇文章主要介绍audio驱动之简单介绍audio驱动原理概述audio驱动中的一些术语以及概念查看声卡设备的一些常用命令audio驱动加载顺序,现在分享给大家,希望可以做个参考。

文章目录

  • audio驱动原理概述
  • audio驱动中的一些术语以及概念
  • 查看声卡设备的一些常用命令
    • <1>查看声卡的设备文件
    • <2>查看声卡0下面挂载的设备
    • <3>查看某个具体pcm设备的信息
    • <4>查看注册的所有pcm设备的设备名称
  • audio驱动加载顺序

audio驱动原理概述

ASoC 被分为 MachinePlatformCodec 三大部件,Platform 驱动的主要作用是完成音频数据的管理, 最终通过 CPU数字音频接口(DAI) 把音频数据传送给 Codec 进行处理,最终由 Codec 输出音频信号给耳机或者是喇叭。 在具体实现上, ASoC 又把 platform 驱动分为两个部分: snd_soc_platform_driversnd_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:在嵌入式系统里面通常指socI2S、PCM总线控制器,负责把音频数据从I2S TX FIFO搬运到CODEC(这里是播放的情形,录制则相反)。cpu_dai通过 snd_soc_register_dai 来注册。嵌入式系统中一般是I2SPCM接口。
  • pcm_dma:负责把dma_buffer中的音频数据搬运到I2S TX FIFO。值得留意的是:某些情形下是不需要dma操作的,比如modemcodec直连,因为modem·本身已经把数据送到FIFO`了,这时只需启动
  • platform_dai(cpu_dai):连接platformmachine

  • codec :字面上的意思就是编解码器,在播放音频的过程中,将传输过来的经过采样量化成数字信号的音频数据,通过DAC转换成模拟信号,然后输出到喇叭或者耳机,让我们可以听到声音。Codec 里面包含了 I2S接口、DAC、ADC、Mixer、PA(功放),通常包含多种输入(Mic、Line-in、I2S、PCM)多个输出(耳机、喇叭、听筒,Line-out)CodecPlatform一样,是可重用的部件。这个模块由codec厂商负责提供此部分的代码。

  • codec_dai:连接codecmachine

  • machine:指某款机器,比如智能手机,通过配置dai_linkcpu_dai、codec_dai、modem_dai 各个音频接口给链结成一条条音频链路,然后注册 snd_soc_card。和上面两个不一样,PlatformCODEC 驱动一般是可以重用的,而 machine 有它特定的硬件特性,几乎是不可重用的 。所谓的硬件特性指:soc platformcodec 的差异;DAIs 之间的链结方式;通过某个 GPIO 打开 Amplifier;通过某个 GPIO 检测耳机插拔;使用某个时钟如 MCLK/External-OSC 作为 I2S、CODEC 的时钟源等。

  • dai_linkmachine 驱动中定义的音频数据链路,它指定链路用到的 codec、codec_dai、cpu_dai、platform 。一个系统可能有多个音频数据链路,比如 mediavoice,因此可以定义多个 dai_link

  • PCMPCM(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>查看声卡的设备文件

复制代码
1
2
ls -l /dev/snd
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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下面挂载的设备

复制代码
1
2
ls -l /proc/asound/card0
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-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设备的信息

复制代码
1
2
cat /proc/asound/card0/pcm0p/info
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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设备的设备名称

复制代码
1
2
cat /proc/asound/pcm
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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驱动加载顺序

复制代码
1
2
3
4
5
6
7
[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驱动中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部