君正 X1000 音频驱动架构

X1000 音频驱动架构笔记

使用开发板X1000_HALLEY2_V2.0,源码为北京君正官方源码V7.0版本,与V6.0无太多差异

项目中遇到的问题

这是内核源码中设置所导致的,可能官方认为X1000这样设置会最好,可是我们需要小于30MS 的周期设置,所以需要修改内核源码。需要修改文件 asoc-dms-v13.c 中 PAGE_SIZE / 4 —> PAGE_SIZE / 8:

修改代码截图

源码分析

查看编译内核目录,编译进可执行程序中的关于音频的文件为:

./sound_core.o
./core/snd-page-alloc.o
./core/misc.o
./core/jack.o
./core/memalloc.o
./core/pcm_lib.o
./core/pcm_memory.o
./core/sound.o
./core/init.o
./core/device.o
./core/snd-compress.o
./core/snd-pcm.o
./core/pcm_native.o
./core/built-in.o
./core/snd-timer.o
./core/memory.o
./core/control.o
./core/info.o
./core/pcm_misc.o
./core/compress_offload.o
./core/pcm.o
./core/pcm_timer.o
./core/snd.o
./core/timer.o
./soundcore.o
./soc/soc-dapm.o
./soc/soc-compress.o
./soc/soc-jack.o
./soc/snd-soc-core.o
./soc/soc-io.o
./soc/soc-utils.o
./soc/soc-pcm.o
./soc/soc-cache.o
./soc/soc-core.o
./soc/ingenic/snd-asoc-pcm-dump.o
./soc/ingenic/snd-asoc-dmic-dump.o
./soc/ingenic/snd-asoc-aic-v12.o
./soc/ingenic/snd-asoc-icdc-d3.o
./soc/ingenic/snd-soc-phoenix-icdc.o
./soc/ingenic/asoc-board/phoenix_icdc.o
./soc/ingenic/icodec/icdc_d3.o
./soc/ingenic/icodec/dmic_dump.o
./soc/ingenic/icodec/pcm_dump.o
./soc/ingenic/snd-asoc-dmic-v13.o
./soc/ingenic/asoc-v13/asoc-i2s-v13.o
./soc/ingenic/asoc-v13/asoc-dma-v13.o
./soc/ingenic/asoc-v13/asoc-pcm-v13.o
./soc/ingenic/asoc-v13/asoc-dmic-v13.o
./soc/ingenic/snd-asoc-dma-v13.o
./soc/ingenic/snd-asoc-pcm-v13.o
./soc/ingenic/asoc-v12/asoc-aic-v12.o
./soc/ingenic/snd-asoc-i2s-v13.o
./last.o

根据ASOC音频架构,LINUX 内核中分为 machine, platform, codec 三部分,采用分隔的思想,这三部分之间的关系,下面的大神分析的很透彻,我就不重复了。
https://blog.csdn.net/DroidPhone/article/details/6271122

machine

搜索编译的文件,寻找出 machine 部分的代码为 phoenix_icdc.c
machine 部分源码
以上为 machine 驱动文件的 Platfoem driver 结构体,当 platform 设备与驱动都注册挂接到 platform 总线上的时候,会调用驱动的 probe 所指向的函数,即 snd_phoenix_probe;
函数snd_phoenix_probe

其中 pdev->dev->platform_data 在Platform设备文件中为
设备数据
其中的宏定义为:
设备数据
设备数据

音频驱动中最重要的结构体 snd_soc_dai_linkphoenix_dais :
phoenix_dais

其中,第一个是常使用的音频结构,采用内部I2S 接口,内部codec icdc-d3,搜索相关的名字即可找到对应的设备驱动;
第二个数据为蓝牙使用的驱动,采用 PCM 接口通信;

platform

platform 部分驱动文件名为 asoc-dma-v13.c ,搜索 jz_asoc-dmic-dma 即可:
platform

platform 部分的主要作用在上面标注的博客中描述的很详细;

还有一些深入的研究,没有写出来,需要过段时间, 暂时写这些,以后慢慢补。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Happy_Enger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值