android gsm驱动模块详细分析

android gsm驱动模块详细分析

ID:9505416

大小:60.00 KB

页数:7页

时间:2018-05-01

android gsm驱动模块详细分析_第1页
android gsm驱动模块详细分析_第2页
android gsm驱动模块详细分析_第3页
android gsm驱动模块详细分析_第4页
android gsm驱动模块详细分析_第5页
资源描述:

《android gsm驱动模块详细分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、AndroidGSM驱动模块详细分析  Android的RIL驱动模块,在hard的支持,另有一cdma分支,这里分析的是gsm驱动。  GSM模块,由于Modem的历史原因,AP一直是通过基于串口的AT命令与BB交互。包括到了目前的一些edge或3g模块,或像omap这类ap,bp集成的芯片,已经使用了USB或其他等高速总线通信,但大多仍然使用模拟串口机制来使用AT命令。这里的RIL(RadioInterfaceLayer)层,主要也就是基于AT命令的操作,如发命令,response解析等。(gprs等传输

2、会用到的MUX协议等在这里并没有包含,也暂不作介绍。)  以下是详细分析,本文主要涉及基本架构和初始化的内容:  首先介绍一下rild与libril.so以及librefrence_ril.so的关系:  1.rild:  仅实现一main函数作为整个ril层的入口点,负责完成初始化。  2.libril.so:  与rild结合相当紧密,是其共享库,编译时就已经建立了这一关系。组成部分为ril.cpp,ril_event.cpp。libril.so驻留在rild这一守护进程中,主要完成同上层通信的工作,接受

3、ril请求并传递给librefrence_ril.so,同时把来自librefrence_ril.so的反馈回传给调用进程。  3.librefrence_ril.so:  rild通过手动的dlopen方式加载,结合稍微松散,这也是因为librefrence.so主要负责跟Modem硬件通信的缘故。这样做更方便替换或修改以适配更多的Modem种类。它转换来自libril.so的请求为AT命令,同时监控Modem的反馈信息,并传递回libril.so。在初始化时,rild通过符号RIL_Init获取一组函数指

4、针并以此与之建立联系。  4.radiooptions:  radiooptiongs通过获取启动参数,利用socket与rild通信,可供调试时配置Modem参数。  接下来分析初始化流程,主入口是rild.c中的main函数,主要完成三个任务:  1.开启libril.so中的event机制,在RIL_startEventLoop中,是最核心的由多路I/O驱动的消息循环。  2.初始化librefrence_ril.so,也就是跟硬件或模拟硬件modem通信的部分(后面统一称硬件),通过RIL_Init函

5、数完成。  3.通过RIL_Init获取一组函数指针RIL_RadioFunctions,并通过RIL_register完成注册,并打开接受上层命令的socket通道。  首先看第一个任务,也就是RIL_startEventLoop函数。RIL_startEventLoop在ril.cpp中实现,它的主要目的是通过pthread_create(s_tid_dispatch,attr,eventLoop,NULL)建立一个dispatch线程,入口点在eventLoop.而eventLoop中,会调ril_ev

6、ent.cpp中的ril_event_loop()函数,建立起消息(event)队列机制。  我们来仔细看看这一消息队列的机制,这些代码都在ril_event.cpp中。voidril_event_init();voidril_event_set(structril_event*ev,intfd,boolpersist,ril_event_cbfunc,void*param);voidril_event_add(structril_event*ev);voidril_timer_add(structril_e

7、vent*ev,structtimeval*tv);voidril_event_del(structril_event*ev);voidril_event_loop();structril_event{structril_event*next;structril_event*prev;intfd;intindex;boolpersist;structtimevaltimeout;ril_event_cbfunc;void*param;};  每个ril_event结构,与一个fd句柄绑定(可以是文件,sock

8、et,管道等),并且带一个func指针去执行指定的操作。  具体流程是:ril_event_init完成后,通过ril_event_set来配置一新ril_event,并通过ril_event_add加入队列之中(实际通常用rilEventAddeouts(),processReadReadies(rfds,n),firePending()。后文会详细分析这些流程。  另外我们可以看到,在进入ril

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。