AndroidRIL分析报告.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android RIL 分析 Wang Guo 什么是RIL Radio Interface Layer (RIL)提供了无线通信服务在上层应用(注1)和radio实现(注2)之间的逻辑抽象层。 RIL的设计目的,是为上层应用开发者,提供一个众所周知的通用服务接口,使应用开发者专注于应用功能的实现,而屏蔽掉不同radio实现间的细节差异;同时RIL也提供通用的下层移植接口,使采用了RIL架构的产品平台可方便地在不同的radio实现之间移植。 智能机平台,如Windows Mobile ,Android等,均采用了RIL架构,在本文中,我们以Android的RIL进行分析 RIL在Android体系中的位置 Android的RIL结构 android的RIL,分成上下两个部分; 上层部份是基于Java的实现,它位于Android的Java Framework中。它又细分为了两个部分:一个是RIL模块,这个模块主要用于与下层的rild进行通信;另外一部份是具体的功能服务模块,这个模块直接给应用开发者提供Phone,SMS,数据通信等功能接口。 下层部份是基于C/C++的实现,位于Linux Kernel之上。它也细分为两部份:一部分是RILD服务进程,它与Java Framework的RIL模块进行通信;另一部分是Vendor RIL,这个部分负责与具体的radio实现进行通信。 SMS在RIL中的处理流程1 应用中使用android.telephony.smsManager类的sendTextMessage()方法发送sms smsManager类通过AIDL接口(注1)与Java Framework中的com.android.internal.telephony.IccSmsInterfaceManager通信 IccSmsInterfaceManager最终通过com.android.internal.telephony.ril,将sms数据与RIL_REQUEST_SEND_SMS消息,通过JNI接口(注2)下发到RIL的C/C++实现部份中去。 SMS在RIL中的处理流程2 RIL的C/C++实现部份处理流程: 在标准的RIL实现reference-ril.c中,onRequest()接收并处理JNI接口发过来的RIL_REQUEST_SEND_SMS消息,将SMS数据打包成标准AT串请求,进行发送。 在BroadCom的RIL实现bcm_uril.c中,onRequestInternal()接收并处理JNI发过来的RIL_REQUEST_SEND_SMS消息,将SMS数据进行自定义打包,使用KRIL_SendCmd 命令把当前操作添加到gKrilCmdQueue队列中,等待执行(该队列的解析执行被BroadCom封装,外部不可见) 其它业务在RIL中的处理流程 同SMS业务在RIL中的处理流程类似,Call,Data Call等业务,在标准的RIL实现reference-ril.c中,都由onRequest()函数,按消息类型进行分捡,然后根据不同的Radio实现的对应接口要求,进行相应处理。 RIL中消息队列机制(1) 在Android RIL中,为了达到等待多路输入并且不出现阻塞的目的,使用了IO多路复用机制(select机制)。 Ril_event.cpp中,定义了RIL消息队列watch_table, 消息循环ril_event_loop()函数中,通过Linux的select机制,将与watch_table对应的IO描述符表中满足接收条件的描述符分捡出来,并调用对应的回调函数执行具体的事件处理。 RIL中消息队列机制(2) RIL消息队列起始点为RIL_startEventLoop(),它创建一个线程eventLoop(),调用ril_event.cpp中的ril_event_loop()函数,建立起消息队列机制。 在Android RIL初始化完成后,将有几个event被挂入到eventLoop中: 在ril_event.cpp中还持有一个watch_table数组,一个timer_list链表和一个pending_list链表。 无名管道,用于队列主动唤醒 s_wakeupfd_event 名为rild-debug的socket,调试用requeset response通道 s_debug_event 名为rild的socket,主要requeset response通道 s_listen_event 待处理(对其回调函数进行调用)的所有ril_event的链表 pending_list 存放timer event的链表,在eventLoop唤醒时要对这些timer event单独进行处理

您可能关注的文档

文档评论(0)

w5544434 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档