当前位置:   article > 正文

Linux 下的 A2B_a2b 库

a2b 库

https://github.com/jakemoroni/audio_async_loopback

https://lkml.org/lkml/2019/12/9/738https://lkml.org/lkml/2019/12/9/738

从上面的解释中,跟之前对其理解A2B网络是一个提前预定义好的网络结构,非热插拔网络.

  1. /work/adi/a2b/opt/analog/cces-linux-add-in/1.3.1/buildroot-sc5xx-1.3.1/src$ patch -p0 < ./opt/analog/a2b-alsa-driver/0.1.0/a2bpatch/a2bpatchfile
  2. patching file buildroot/linux/linux-kernel/arch/arm/boot/dts/sc584-ezkit.dts
  3. patching file buildroot/linux/linux-kernel/arch/arm/boot/dts/sc58x.dtsi
  4. patching file buildroot/linux/linux-kernel/arch/arm/configs/sc584-ezkit_defconfig
  5. patching file buildroot/linux/linux-kernel/arch/arm/mach-sc58x/include/mach/sc58x.h
  6. patching file buildroot/linux/linux-kernel/arch/arm/mach-sc58x/sc58x-ezkit.c
  7. patching file buildroot/linux/linux-kernel/include/sound/sc5xx-dai.h
  8. patching file buildroot/linux/linux-kernel/include/sound/sc5xx-sru.h
  9. patching file buildroot/linux/linux-kernel/sound/soc/adi/Kconfig
  10. patching file buildroot/linux/linux-kernel/sound/soc/adi/Makefile
  11. patching file buildroot/linux/linux-kernel/sound/soc/adi/sc5xx-asoc-card.c
  12. patching file buildroot/linux/linux-kernel/sound/soc/adi/sc5xx-i2s.c
  13. patching file buildroot/linux/linux-kernel/sound/soc/adi/sc5xx-sport.c
  14. patching file buildroot/linux/linux-kernel/sound/soc/adi/sc5xx-tdm.c
  15. patching file buildroot/linux/linux-kernel/sound/soc/codecs/a2b24xx.c
  16. patching file buildroot/linux/linux-kernel/sound/soc/codecs/a2b24xx.h
  17. patching file buildroot/linux/linux-kernel/sound/soc/codecs/a2b24xx-i2c.c
  18. patching file buildroot/linux/linux-kernel/sound/soc/codecs/adi_a2b_i2c_commandlist.h
  19. patching file buildroot/linux/linux-kernel/sound/soc/codecs/Kconfig
  20. patching file buildroot/linux/linux-kernel/sound/soc/codecs/Makefile

 

 

 硬件设备跟下面的驱动打印完全对应的上。

Linux ALSA 音频系统架构大致如下:

  1. +--------+ +--------+ +--------+
  2. |tinyplay| |tinycap | |tinymix |
  3. +--------+ +--------+ +--------+
  4. | ^ ^
  5. V | V
  6. +--------------------------------+
  7. | ALSA Library API |
  8. | (tinyalsa, alsa-lib) |
  9. +--------------------------------+
  10. user space ^
  11. -------------------------------|---------------------
  12. kernel space V
  13. +--------------------------------+
  14. | ALSA CORE |
  15. | +-------+ +-------+ +------+ |
  16. | | PCM | |CONTROL| | MIDI |...|
  17. | +-------+ +-------+ +------+ |
  18. +--------------------------------+
  19. |
  20. +--------------------------------+
  21. | ASoC CORE |
  22. +--------------------------------+
  23. |
  24. +--------------------------------+
  25. | hardware driver |
  26. | +-------+ +--------+ +-----+ |
  27. | |Machine| |Platform| |Codec| |
  28. | +-------+ +--------+ +-----+ |
  29. +--------------------------------+
  • Native ALSA Application:tinyplay/tinycap/tinymix,这些用户程序直接调用 alsa 用户库接口来实现放音、录音、控制
  • ALSA Library API:alsa 用户库接口,常见有 tinyalsa、alsa-lib
  • ALSA CORE:alsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)
  • ASoC CORE:asoc 是建立在标准 alsa core 基础上,为了更好支持嵌入式系统和应用于移动设备的音频 codec 的一套软件体系
  • Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec

ALSA/ASoC 中硬件设备关系:

  1. +------------------------------------------+
  2. | Machine |
  3. | +--------------+ +--------------+ |
  4. | | Platform | | Codec | |
  5. | | | I2S | | |
  6. | | cpu_dai|<---->|codec_dai | |
  7. | | | | | |
  8. | +--------------+ +--------------+ |
  9. +------------------------------------------+
  • Platform:指某款 SoC 平台的音频模块,如 exynos、omap、qcom 等等。Platform 又可细分两部分:
    • cpu dai:在嵌入式系统里面通常指 SoC 的 I2S、PCM 总线控制器,负责把音频数据从 I2S tx FIFO 搬运到 CODEC(这是回放的情形,录制则方向相反)。cpu_dai 通过 snd_soc_register_dai() 来注册。注:DAI 是 Digital Audio Interface 的简称,分为 cpu_dai 和 codec_dai,这两者通过 I2S/PCM 总线连接;AIF 是 Audio Interface 的简称,嵌入式系统中一般是 I2S 和 PCM 接口。
    • pcm dma:负责把 dma buffer 中的音频数据搬运到 I2S tx FIFO。值得留意的是:某些情形下是不需要 dma 操作的,比如 Modem 和 CODEC 直连,因为 Modem 本身已经把数据送到 FIFO 了,这时只需启动 codec_dai 接收数据即可;该情形下,Machine 驱动 dai_link 中需要设定 .platform_name = "snd-soc-dummy", 这是虚拟 dma 驱动,实现见 sound/soc/soc-utils.c。音频 dma 驱动通过 snd_soc_register_platform() 来注册,故也常用 platform 来指代音频 dma 驱动(这里的 platform 需要与 SoC Platform 区分开)。
    • Codec:对于回放来说,userspace 送过来的音频数据是经过采样量化的数字信号,在 codec 经过 DAC 转换成模拟信号然后输出到外放或耳机,这样我们就可以听到声音了。Codec 字面意思是编解码器,但芯片里面的功能部件很多,常见的有 AIF、DAC、ADC、Mixer、PGA、Line-in、Line-out,有些高端的 codec 芯片还有 EQ、DSP、SRC、DRC、AGC、Echo-Canceller、Noise-Suppression 等部件。
  • 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 的时钟源等等。

下面的图中说明了Machine,Platform,Codec,cpu_dai,codec_dai

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/105275
推荐阅读
相关标签
  

闽ICP备14008679号