android音频驱动学习问题与总结

来源:互联网 发布:js 创建对象数组 编辑:程序博客网 时间:2024/06/05 04:54

转载自 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=57065


想了解一下audio data硬件上的传输路径,以及kernel里面sound部分的总体框架,有高手了解的话请指教,谢谢:)

还想了解一下下面的问题:

1) 可以再讲解一下audio PCM stream的管理以及opencore解码部分的相互关系?

2) audio 部分的IPC是如何通信?

3) HAL层和ALSA lib的对应关系?

4) driver的接口和ALSA-lib是如何对应起来的?

小弟最近在研究这方面的东西,请各位高手指点一下,做driver也要对上层的东西了解一下。

最好不要长篇大论,用简洁的语言归纳一下,我也会把学习的体会及时更新到这篇文章中来,谢谢。

=======================================================
2011/01/28  update

首先要明白audio从上到下的一个流程是最重要的,下面是我目前对整个架构的理解:

structure.jpg

上层的AP通过framework提供的接口创建一下audio播放的实例,framework中java layer通过JNI调用
libmedia部分,这部分是用C++写的,AudioFlinger中的内容都是继承libmedia的类,上层调用libmedia
最终还是落到audio flinger的接口上,audio flinger通过HAL层提供的接口得到一个HAL interface的一个实例
然后调用实例的接口,而HAL层一般就是对系统调用接口的一个封装,对于audio系统,目前android的架构
是HAL不会直接操作driver的接口,而是通过ALAS-lib提供的接口来使用,让ALSA-lib来封装driver的接口,如
系统调用ioctl之类的,这是目前我自己的理解,有不足的地方请指教,谢谢。。



=================================================
2011/01/28 update  上传一个自己的总结,有兴趣的可以看看。。
因为主要是driver的学习,所以上层的架构没有怎么仔细去看,只是简单整理。

00 Summary_audio_structure实例已上传至我的资源



=================================================
2011/02/09 update  新年第一天上班,准备在HAL层加一些trace跟踪代码
(1) 进入android代码顶层目录,执行 source build/envsetup.sh ==> 可以生成一些如mm这样的命令
(2) 在HAL层代码添加如LOGE的trace
(3) 进入external目录下libaudio目录,执行mm单独编译这个模块
(4) 回到顶层目录,执行make snod更新system.img,这样只要更新这个文件到device就可以了
执行make snod前提必须是整个工程已经被编译过,这样的方法可以快速把修改后的结果更新到
system.img中,不用整个工程重新编译
那么下来就根据trace看一看流程是怎样的。。。。