我是靠谱客的博主 幽默香烟,最近开发中收集的这篇文章主要介绍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>查看声卡的设备文件

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驱动加载顺序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部