Linux ALSA 图解

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 图解

platform

Linux ALSA 图解

codec

总结

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


  

 

  推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

Linux ALSA 图解

Linux ALSA 图解

嵌入式Linux

微信扫描二维码,关注我的公众号