linux驱动编写(声卡驱动之asoc移植)

2019-07-13 05:12发布

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com
    Linux下面的声卡驱动很复杂,根本不是一篇博客能够说清楚的。所以,本片文章的目的就是让同学门快速入门。或者,换句话说,它可以帮助大家在基本了解linux声卡框架的条件下完成声卡移植工作。
1、linux声卡驱动在哪个目录sound/
2、oss、alsa、asoc是什么关系
oss是最老的声卡驱动框架,alsa是最新的声卡驱动框架,asoc是适配soc结构、且满足alsa框架的子框架,也是和硬件打交道的底层代码。
3、alsa和asoc最重要的框架代码在哪里alsa的框架代码位于sound/coreasoc的框架代码位于sound/soc/soc-*.c
4、如何适配asoc框架asoc一般包括platform、codec、machine这三个结构。platform指具体的soc芯片,codec指具体的解码芯片或模块,machine负责将platform和codec关联在一起。
5、声卡移植好了,怎么测试一般再移植madplayer软件来测试
6、如何用真实的代码来说明asoc的三个模块如何关联的a,以三星系列芯片为例,查看sound/soc/samsung/Kconfig,config SND_SOC_SAMSUNG_S3C24XX_UDA134X tristate "SoC I2S Audio support UDA134X wired to a S3C24XX" depends on ARCH_S3C24XX select SND_S3C24XX_I2S select SND_SOC_L3 select SND_SOC_UDA134X
b,除了SND_SOC_L3这个不太熟悉的macro之外,Kconfig已经清楚地说明了各模块的关系SND_SOC_SAMSUNG_S3C24XX_UDA134X,此为machine模块SND_S3C24XX_I2S,此为platform模块SND_SOC_UDA134X,此为codec模块
c,根据makefile,可以找到各个macro对应的c文件SND_S3C24XX_I2S对应s3c24xx-i2s.c文件SND_SOC_SAMSUNG_S3C24XX_UDA134X对应s3c24xx-uda134x.c文件
d,codec文件一般单独放在sound/soc/codecs目录下SND_SOC_UDA134X对应sound/soc/codecs下的uda134x.c文件
e,platform和codec复用数据结构,但是两者侧重点不同
f,对于soc来说,弄懂了asoc基本上就可以移植soc的声卡了如果需要深究,还需要进一步阅读sound/core和sound/soc/下的基础流程代码才行。当然只要编写好了接口,上层的声卡、pcm、dsp就会全部创建好,只是细节部分还需要自己一步一步去研究才行。