文章目录

  • 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驱动之简单介绍相关推荐

  1. Web Audio API实现简单变声效果

    前言 想在网页中实现实时音频变声效果该如何实现呢,之前遇到这种处理音视频的需求,可能会想到需要借助C代码实现.但是现在随着浏览器性能的提升.web API的丰富,通过浏览器原生的API也可以操作音频数 ...

  2. linux驱动简单介绍

     linux驱动简单介绍 驱动基本介绍 驱动.顾名思义就是"驱使硬件设备行动".设备驱动与底层硬件之间打交道,按照硬件设备的具体操作方式来读写设备寄存器,最终完成一系列操作. 设备 ...

  3. MTD NANDFLASH驱动相关知识介绍

    转:http://blog.csdn.net/zhouzhuan2008/article/details/11053877 目录 MTD总概述 MTD数据结构 MTD相关层实现 MTD,Memory ...

  4. input:file上传类型控制简单介绍

    <input type="file">可以上传文件,这个就不用多介绍了. 其实我们使用此控件可以进行上传文件格式的控制. 特别说明:在实际应用中,不但要在前端进行验证, ...

  5. Linux 下UVCamp;V4L2技术简单介绍(二)

    通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...

  6. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  7. Waveform Audio 驱动(Wavedev2)之:WAV API模拟

    Waveform Audio  驱动(Wavedev2)之:WAV API模拟 Waveform 驱动对Windows Mobile来说是一个非常重要的驱动,控制着所有有关声音的操作,包括喇叭.耳机. ...

  8. WinCE电源管理的简单介绍

    电源管理的目的是节能,基本的节能方法是使系统适时的进出休眠状态.比如用户按下On/Off按钮,或者监视用户活动的定时器超时,或者应用呼叫api都可以使得系统休眠,用户再次按下On/Off或者其他唤醒中 ...

  9. Karplus-Strong 算法简单介绍和实现

    Karplus-Strong 算法简单介绍和实现 本文为Coursera数字信号处理课程第一周内容,对相关课程刚兴趣的同学,请参看这里 为了有更好的交互性,本文所有代码均上传至Microsoft Az ...

  10. NVIDIA芯片组BIOS设置和RAID设置简单介绍

    NVIDIA芯片组BIOS设置和RAID设置简单介绍 nForce系列芯片组的BIOS里有关SATA和RAID的设置选项有两处,都在Integrated Peripherals(整合周边)菜单内. S ...

最新文章

  1. 从业5年,教你学习Linux开发
  2. c# out原理 ref_3-Unity入门学习之C#基础2「数据类型」
  3. day18-Map和Collection应用
  4. python实现mongodb的备份与导入
  5. Java 多线程(四)—— 单例模式
  6. 2021- 10 -13 AVL树的平衡调整(有parent指针) 代码逻辑
  7. vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
  8. 如何确定python开发环境已经配置好_搭建 python 开发环境 前面安装选位置我直接回车了现在我想测试查看目录该怎么办...
  9. Java中的Math类和日期类详解
  10. jQuery滚动数字
  11. jQuery和CSS3炫酷滚动页面内容元素动画特效
  12. 2021年淮南高考成绩查询,2021年淮南高考最高分多少分,历年淮南高考状元
  13. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...
  14. Dubbo原理和源码解析之服务暴露
  15. Tableau过期处理方法
  16. python的三种将整数转换成二进制的方法
  17. 计算机科学与技术b类大学名单,双一流a类大学和b类大学名单及学科
  18. Windows Diskpart命令详解
  19. “蔚来杯“2022牛客暑期多校训练营5 Don‘t Starve
  20. 2018,灵魂无处安放的一年

热门文章

  1. 朱志坤计算机学院,厦门工学院第七届田径运动会竞赛规程.doc
  2. 数学模型预测模型_改进著名的nfl预测模型
  3. Android 仿自如APP裸眼3D效果
  4. 云服务器对比虚拟主机,云服务器对比虚拟主机
  5. 转载:Transferring Login Credentials Securely
  6. Spout 【API 解析】 -spout-bolt-
  7. nodejs eggjs框架 爬虫 readhub.me
  8. 第17节 三个败家子(17)——少侠孙坚
  9. 人人商城开启整点秒杀功能
  10. 信息安全等级保护分为几个级别呢?