嵌入式声卡驱动模块的编译和移植

目的 :
tiny210的声卡移植编译, 并能正常工作。
背景
手头有友善之臂的tiny210和tiny6410。我留意到tiny210的核心板比6410多了一个排针座,但是另外两个针座的位置都是一样的。于是我在想友善之臂的工程师,会不会把把tiny210设计成与tiny6410兼容,把功能相同的引脚设计在相同的位置。然后把tiny210特有的功能放到新增的排针座里呢?抱着这一想法,我粗略地对比了一下两个开发板的底板原理图,我惊奇地发现两个底板相同位置的针脚果然是相同的。这让我太激动了,因为我们原来的项目开发的底板就可以不用修改,直接升级到s5pv210进行使用了。于是我试了一下,把210的核心板装到原来6410的底板上。
发现存在一些问题:
1、启动方式不同的,210和6410选择用SD卡进行启动的开关是相反的。
2、声音没有了。仔细看原理图和底板,发现6410使用的是采用Ac97方式通讯的Wm9713芯片,而210使用的是采用I2S方式通讯的wm8960芯片。
其它的功能基我们的产品没有使用。于是我准备好为tiny210增加wm9713芯片的驱动,让s5pv210的核心板可用于6410的底板上。


第一阶段最终成果
这阶段只是分析了友善提供的2.6.35.7的内核中与声卡相关信息,这也是本文主要讲述的内容。


经过学习和分析发现 友善提供的2.6.35.7的内核中,并没有包含声卡驱动的源代码(wm8960),只是提供编译好的二进制内核模块文件,并且也不是放在内核中,而是放在了Android的文件系统中。
相关的内核模块文件在
/system/lib/modules/2.6.35.7-FriendlyArm/kernel/sound/soc/s5pv2xx/snd-soc-mini210-wm8960.ko
这个驱动核驱动还要搭配文件系统中的
/system/vendor/fa_codec_ctrl
一起使用才可以正常使用wm8960 声音设备。


学习过程
我为什么能了解到上面提到的这些信息呢?以下是我的分析过程:
1、同样查看内核中的Kconfig文件,以了解一下声卡驱动涉及什么宏:
结果在 /linux-xxx/sound/soc/s5pv2xx/kconfig 文件中找到相应的内容:


config SND_S5PV2XX_SOC_WM8960
tristate "SoC I2S Audio support for WM8960 on MINI210"
depends on SND_S5PV2XX_SOC
select SND_SOC_WM8960_MINI210
select SND_S5PC1XX_SOC_I2S
help
 Say Y if you want to add support for SoC audio on the MINI210.



上面的内容说明跟声卡有关的宏是 SND_S5PV2XX_SOC_WM8960、SND_SOC_WM8960_MINI210、SND_S5PC1XX_SOC_I2S


2、下一步查找一下相同目录下的makefile文件,看一下上面这些宏涉及什么文件,结果找到了以下内容:
ifneq ($(wildcard sound/soc/s5pv2xx/wm8960.c),)
ifeq ($(FA),1)
obj-$(CONFIG_SND_SOC_WM8960_MINI210) += snd-soc-wm8960.o
else
obj-m += snd-soc-wm8960.o
endif  #FA
endif


# S5PV2XX Machine Support
snd-soc-mini210-wm8960-objs := mini210_wm8960.o


ifneq ($(wildcard sound/soc/s5pv2xx/mini210_wm8960.c),)
ifeq ($(FA),1)
obj-$(CONFIG_SND_S5PV2XX_SOC_WM8960) += snd-soc-mini210-wm8960.o
else
obj-m += snd-soc-mini210-wm8960.o
endif  #FA
endif



这个内容的意思是:如果目录下有 wm8960.c mini210_wm8960.c 这些文件,就把它们编译出来,如果没有就不做事情。了解到这一点后,我们在该目录下查找一下这些跟声卡有关的源代码。结果发现友善并没有提供这两个文件的源代码。


3、没有提供这些原代码,那么必然是以驱动模块的方式来进行加载的,所以这一时我再查了一下友善提供的开发板的“文件系统”。查询里面的所有*.ko文件。结果在 /system/lib/modules/2.6.35.7-FriendlyArm/kernel/sound/soc/s5pv2xx/ 中找到了相关“可疑”的驱动: snd-soc-mini210-wm8960.ko


4、查看启动时的脚本,分析一下在什么时候加载了这些驱动,认真查看每一个启动相关的文件:
4.1在 init.mini210.rc 中发现以下内容:
service mini210-setup /system/etc/init.mini210.sh
oneshot

4.2查看/system/etc/init.mini210.sh
  发现在该脚本中加载了声卡驱动,并执行了fa_codec_ctrl这个程序才可以正常使用声音设备。

至此基把内核中声音设备的相关内容的位置分析完毕。下一步的任务就是补充这两个文件了(实际上就是开发wm8960的过程了)。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值