ALSA声卡驱动:

1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介

2.Linux ALSA声卡驱动之二:Platform

3. Linux ALSA声卡驱动之三:Platform之Cpu_dai

4. Linux ALSA声卡驱动之四:Codec 以及Codec_dai

5.Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

6.Linux ALSA声卡驱动之六:PCM的注册流程

7.Linux ALSA声卡驱动之七:录音(Capture) 调用流程

一.  ALSA 简介

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。

在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能

Kernel-4.4/sound/core该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分。

Kernel-4.4/sound/soc 针对system-on-chip体系的中间层代码

1.2 ALSA驱动代码文件结构

sound
           /aoa    苹果主板驱动
           /arm     arm架构相关驱动
           /atmel     atmel设备驱动
           /core      该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分
           /drivers    不同架构中一些驱动共享文件放置一些与CPU、BUS架构无关的公用代码
           /i2c        ALSA自己的I2C控制代码
           /isa       isa声卡的上层模块
           /mips      MIPS声卡设备驱动
           /oos       oos架构
           /parisc    gsc声卡驱动
            /pci       pci声卡
            /ppc      powerPC架构有关
            /sh      SUPERH声卡驱动
            /soc   system-on-chip
            /sparc    Sparc声卡驱动
            /synth     synth中间层
            /usb     usb-audio驱动

从上面驱动代码结构中我们可以知道,我们主要关心core和soc文件夹里面的代码

1.3 ALSA设备文件结构

1.3.1    /dev/snd        ls -l

    crw-rw---- 1 system audio  14,  12 2020-03-09 06:40 adsp
crw-rw---- 1 system audio  14,   4 2020-03-09 06:40 audio
crw-rw---- 1 system audio 116,   2 2020-03-09 06:40 controlC0
crw-rw---- 1 system audio  14,   3 2020-03-09 06:40 dsp
crw-rw---- 1 system audio  14,   0 2020-03-09 06:40 mixer
crw-rw---- 1 system audio 116,   3 2020-03-09 06:40 pcmC0D0p
crw-rw---- 1 system audio 116,  19 2020-03-09 06:40 pcmC0D10c
crw-rw---- 1 system audio 116,  20 2020-03-09 06:40 pcmC0D11p
crw-rw---- 1 system audio 116,  21 2020-03-09 06:40 pcmC0D12p
crw-rw---- 1 system audio 116,  22 2020-03-09 06:40 pcmC0D13c
crw-rw---- 1 system audio 116,  23 2020-03-09 06:40 pcmC0D14c
crw-rw---- 1 system audio 116,  24 2020-03-09 06:40 pcmC0D15p
crw-rw---- 1 system audio 116,  25 2020-03-09 06:40 pcmC0D16c
crw-rw---- 1 system audio 116,  26 2020-03-09 06:40 pcmC0D17c
crw-rw---- 1 system audio 116,  28 2020-03-09 06:40 pcmC0D18c
crw-rw---- 1 system audio 116,  27 2020-03-09 06:40 pcmC0D18p
crw-rw---- 1 system audio 116,  29 2020-03-09 06:40 pcmC0D19p
crw-rw---- 1 system audio 116,   4 2020-03-09 06:40 pcmC0D1c
crw-rw---- 1 system audio 116,  30 2020-03-09 06:40 pcmC0D20p
crw-rw---- 1 system audio 116,  31 2020-03-09 06:40 pcmC0D21p
crw-rw---- 1 system audio 116,  35 2020-03-09 06:40 pcmC0D22c
crw-rw---- 1 system audio 116,  34 2020-03-09 06:40 pcmC0D22p
crw-rw---- 1 system audio 116,  37 2020-03-09 06:40 pcmC0D23c
crw-rw---- 1 system audio 116,  36 2020-03-09 06:40 pcmC0D23p
crw-rw---- 1 system audio 116,  38 2020-03-09 06:40 pcmC0D24p
crw-rw---- 1 system audio 116,   6 2020-03-09 06:40 pcmC0D2c
crw-rw---- 1 system audio 116,   5 2020-03-09 06:40 pcmC0D2p
crw-rw---- 1 system audio 116,   8 2020-03-09 06:40 pcmC0D3c
crw-rw---- 1 system audio 116,   7 2020-03-09 06:40 pcmC0D3p
crw-rw---- 1 system audio 116,  10 2020-03-09 06:40 pcmC0D4c
crw-rw---- 1 system audio 116,   9 2020-03-09 06:40 pcmC0D4p
crw-rw---- 1 system audio 116,  12 2020-03-09 06:40 pcmC0D5c
crw-rw---- 1 system audio 116,  11 2020-03-09 06:40 pcmC0D5p
crw-rw---- 1 system audio 116,  14 2020-03-09 06:40 pcmC0D6c
crw-rw---- 1 system audio 116,  13 2020-03-09 06:40 pcmC0D6p
crw-rw---- 1 system audio 116,  16 2020-03-09 06:40 pcmC0D7c
crw-rw---- 1 system audio 116,  15 2020-03-09 06:40 pcmC0D7p
crw-rw---- 1 system audio 116,  17 2020-03-09 06:40 pcmC0D8p
crw-rw---- 1 system audio 116,  18 2020-03-09 06:40 pcmC0D9p
crw-rw---- 1 system audio 116,   1 2020-03-09 06:40 seq
crw-rw---- 1 system audio  14,   1 2020-03-09 06:40 sequencer
crw-rw---- 1 system audio  14,   8 2020-03-09 06:40 sequencer2
crw-rw---- 1 system audio 116,  33 2020-03-09 06:40 timer

controlC0 -->                 用于声卡的控制,例如通道选择,混音,麦克风的控制等
    midiC0D0  -->                用于播放midi音频
   pcmC0D10c --〉               用于录音的pcm设备:pcm:pcm设备  ,C0:声卡号0,一般设备就一个声卡      D10  设备号是10    c:capture   录音  如果是p:play 播放 。
    pcmC0D11p --〉               用于播放的pcm设备
    seq  --〉                        音序器
   timer --〉                       定时器

1.3.2   /sys/devices/platform/soc-audio        ls -l

       drwxr-xr-x 3 root root 0 2020-03-09 06:40 DEEP_BUFFER_DL_OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 DL1AWBCAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Capturedrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Playbackdrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_MRG_TXdrwxr-xr-x 3 root root 0 2020-03-09 06:40 HDMI_OUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 HP_IMPEDANCEdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0DL1OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0_AWB_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXCAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia1drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia2drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia3drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia_DL2drwxr-xr-x 3 root root 0 2020-03-09 06:40 PLATOFRM_CONTROLdrwxr-xr-x 3 root root 0 2020-03-09 06:40 TDM_Debug_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 ULDLOOPBACKdrwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_PLAYBACKdrwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1_BTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2_BTlrwxrwxrwx 1 root root 0 2020-03-09 08:27 driver -> ../../../bus/platform/drivers/soc-audiodrwxr-xr-x 2 root root 0 2020-03-09 06:40 powerdrwxr-xr-x 3 root root 0 2020-03-09 06:40 soundlrwxrwxrwx 1 root root 0 2020-03-09 08:27 subsystem -> ../../../bus/platform

DEEP_BUFFER_DL_OUTPUT 设备名称,对于mtk平台来说是在mtk-soc-machine.c   mt_soc_dai_common 数组中定义。

  • 1.3.3   /proc/asound/card0    查看声卡0下面挂载的设备

 id        pcm10c pcm13c pcm16c pcm18p pcm20p pcm22p pcm24p pcm3c pcm4p pcm6c pcm7p
oss_mixer pcm11p pcm14c pcm17c pcm19p pcm21p pcm23c pcm2c  pcm3p pcm5c pcm6p pcm8p
pcm0p     pcm12p pcm15p pcm18c pcm1c  pcm22c pcm23p pcm2p  pcm4c pcm5p pcm7c pcm9p
  • 1.3.3.1查看具体pcm设备的信息

cd pcm10c
    ls

info sub0 xrun_debug

cat info

card: 0
device: 10
subdevice: 0
stream: CAPTURE
id: DL1_AWB_Record mt-soc-codec-dl1awb-dai-10
name:
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
  • 1.3.4   /proc/asound/

MultiMedia1_PLayback mt-soc-codec-tx-dai-0 :  : playback 1

-- MultiMedia1_PLayback:对应mt_soc_dai_common 里面的stream_name

-- mt-soc-codec-tx-dai:对应mt_soc_dai_common 里面的codec_dai_name

--   -0 :对应mt_soc_dai_common 数组的顺序

--playback:此pcm是playback类型(播放)

--capture:此pcm是capture类型(录音)

--1  :snd_card下面顺序挂载的第几个pcm设备 ,tinycap -D 0 -d 1      -D 0 表示:声卡0 ,-d 1 表示录音的pcm设备是1号,d是device首字母。

二.  ASOC 简介

ASoC把音频系统同样分为3大部分:Machine,Platform和Codec

        Platform  一般是指某一个SoC平台,比如MT6582, MT6595, MT6752等等,与音频相关的通常包含该SoC中的Clock、FAE、I2S、DMA等等,该模块负责DMA的控制和I2S的控制, 由CPU厂商负责编写此部分代码。

Codec  字面上的意思就是编解码器,Codec里面包含了I2S接口、DAC、ADC、Mixer、PA(功放),通常包含多种输入(Mic、Line-in、I2S、PCM)和多个输出(耳机、喇叭、听筒,Line-out),Codec和Platform一样,是可重用的部件。该模块负责AFIx的控制和DAC部分的控制(也可以说是芯片自身的功能的控制), 由Codec厂商负责编写此部分代码
Machine 是指某一款机器,可以是某款设备,某款开发板,又或者是某款智能手机,由此可以看出Machine几乎是不可重用的,每个Machine上的硬件实现可能都不一样,CPU不一样,Codec不一样,音频的输入、输出设备也不一样,Machine为CPU、Codec、输入输出设备提供了一个载体,用于描述一块电路板, 它指明此块电路板上用的是哪个Platform和哪个Codec, 由电路板商负责编写此部分代码。绑定platform drivercodec driver
   以下是machine  codec  platform 它们之间的关系图

 以上三部分还可以细分:

  •    platform:platform+cpu_dai
  • codec:codec+codec+codec_dai

Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介相关推荐

  1. Linux的声卡驱动中ALSA与OSS的区别和简单流程介

    在声卡的驱动中一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构).OSS是一个商业声卡驱动程序,需要花钱购买.一般我们现在使用的是ALSA的声音架构. Advanced Linux ...

  2. Linux ALSA声卡驱动之八:ASoC架构中的Platform

    1.  Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...

  3. Linux ALSA声卡驱动之四:Codec 以及Codec_dai

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  4. Linux ALSA声卡驱动之二:Platform

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  5. Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  6. Linux ALSA声卡驱动之三:Platform之Cpu_dai

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  7. Linux ALSA声卡驱动之七:录音(Capture) 调用流程

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  8. linux alsa声卡驱动原理分析- 设备打开过程和数据流程,linux alsa声卡驱动原理分析解析- 设备打开过程跟数据流程资料.ppt...

    linux alsa声卡驱动原理分析解析- 设备打开过程跟数据流程资料 Linux ALSA声卡驱动原理分析 -设备打开过程和数据流程;目 录;目 录;一.导 读;目 录;二.ALSA架构简介;二. ...

  9. Linux(RedHat9.0)下Alsa声卡驱动的安装

    自从装来RedHat9.0就没有听到过声音,也不知道安装了多少次声卡驱动,每种都试验过,都没有成功过,今天终于安装成功,需要的朋友可以参考一下. 首先查看一下,系统声音是否打开,有些朋友电脑没有声音, ...

最新文章

  1. 如何将cocos2d-x程序分别移植到ios,android,windowsphone三个手机平台上
  2. SAP MM 由于没有维护Plant的Address信息导致不能在ME51N和ME21N界面里输入工厂代码
  3. SpringMvc CharacterEncodingFilter 解析 encoding 参数并初始化参数
  4. 第三方软件源_两款电视盒子软件。涵盖电视直播,电影,电视剧,你值得拥有。...
  5. python中的进程池Pool
  6. 相机下载_佳能相机如何连接手机传输相片,视频?
  7. Adobe MasterCollection CS5 试用版下载链接
  8. android的toogleButton和switch的使用方法
  9. use tool wget for windows download
  10. python中用来抛出异常的关键字是( )_python异常抛出
  11. 在O(1)的时间内删除链表节点
  12. (HDRP)全局光照技术初探(一)-光照模式与阴影技术
  13. 刷题42-m升水倒入n个杯子(动态规划)
  14. UE_GPU Driven Pipeline Mesh Shader(meshlet)
  15. 实战NLP beginner任务一:基于机器学习的文本分类
  16. matlab 怎麼卸載乾淨,matlab set gca用法
  17. python爬取酷狗音乐top500及歌词_爬取酷狗音乐Top500(示例代码)
  18. 苹果公司不给iPhone配大电池的原因
  19. CVPR 2020 | 旷视研究院提出数据不确定性算法 DUL,优化人脸识别性能
  20. 高等数学:第五章 定积分(4) 定积分的换元法

热门文章

  1. Json 错误com.fasterxml.jackson.databind.exc.MismatchedInputException:Cannot construct instance of
  2. centos7升级gcc版本,无需手动下载源码编译
  3. 紫禁繁花服务器维护,各种坑的坑。
  4. json文件访问404错误
  5. 如何自己计算机硬盘故障,新手怎么快速学习电脑打字 电脑硬盘出现错误怎么办...
  6. 树莓派4B散热片及九层亚克力外壳的正确打开方式
  7. h5移动端vue手势插件,元素图片缩放、旋转拖拉拖拽手势事件
  8. 实例变量与成员变量的区别
  9. Internet Explorer中的潘多拉魔盒   作者:江海 (转)
  10. MySQL 8.0.31 新增支持SQL标准中的交集(INTERSECT)和差集(EXCEPT)表操作符