Linux ALSA 图解

最近在解决一个音频的问题,所以正好借这个机会来把音频的东西重新梳理一下,总结是一个很好的习惯,能方便自以后遇到问题快速排查问题 。

  • 平台「MT8167」
  • 内核版本「kernel 4.4」
音频读数据函数流程
Linux ALSA 图解

文章插图
 
tinyalsa调用读取函数
Linux ALSA 图解

文章插图
 
IOCTL调用流程
Linux ALSA 图解

文章插图
 
读取数据到应用层
内核注册声卡流程
Linux ALSA 图解

文章插图
 
注册
Linux ALSA 图解

文章插图
 
注册PCM
Linux ALSA 图解

文章插图
 
创建pcm设备
Linux ALSA 图解

文章插图
 
创建pcm设备
内核驱动里面的platform、machine和codec如果看alsa驱动,不能清楚这三个「怪兽」的联系,会很容易陷入迷宫里面之中不能自拔 。
  • machine 「可以理解成一个主板、一套代码是可以适配很多很多主板的」
  • platform 「这个代表的是CPU型号,平台相关的东西」
  • codec「也就是音频芯片,有编解码的AD或者DA」

Linux ALSA 图解

文章插图
 
三者联系
machine、platform、codec 关键结构体machine用来指定使用哪个platform和codec 。
Linux ALSA 图解

文章插图
 
machine
Linux ALSA 图解

文章插图
【Linux ALSA 图解】 
platform
Linux ALSA 图解

文章插图
 
codec
总结比较简单,主要是画了几张图片,这些图片对初学者或者是排查问题理清楚框架是有作用的,音频下还有一些ring_buff和路由相关的,自己如何计算没一帧数据的大小,下一次再总结下 。




    推荐阅读