Android电话系统rild-概述篇

本文将简要的介绍android电话系统的架构,rild在电话系统中所处的位置及作用,最后再简单分析QCOM平台中,rild源码的架构。如标题所示,本文主要是对rild的概述,让大家首先了解rild的基本概念。关于rild的具体工作流程,将在以后的章节中详细分析。

Contents

  [hide]
  • 1 android电话系统架构分析
  • 2 Rild作用及架构介绍
    • 2.1 Rild存在的意义
    • 2.2 Rild的基本框架
    • 2.3 Rild数据流
  • 3 Rild源码架构分析

android电话系统架构分析

Android电话系统rild-概述篇_第1张图片


如上图所示,电话系统从上到下大致分为分为:phone service,RIL-Java,RILD以及modem。

phone service代表所有上层的应用,包括Dialer,sms,stk,contact等应用;


[edit]Rild作用及架构介绍

RIL--Radio Interface Layer,包括RIL Java,守护进程rild,动态链接库libril.so,ril实现库libreference-ril.so。 RIL Java层实质上是一个RIL代理,转接的作用,将phone service所有应用的request通过socket发给rild,再把rild通过socket发过来的response返回给上层应用;

Rild是电话系统的核心部分,是init进程启动的一个守护进程,加载了动态链接库libril.so和ril实现库libreference-ril.so,建立socket监听ril java层发来的request,将其打包成AT命令发送给modem,同时将modem发过来的消息进行解析,然后通过socket发给ril java层。

[edit]Rild存在的意义

由于Android开发者使用的Modem是不一样的,不同方案使用的Modem也不一样,GSM和CDMA就差别更大了,所以各种指令格式,初始化序列都不一样,为了消除这些差别,Android将ril做了一个抽象,使用一个虚拟电话的概念。这个虚拟电话对象就是GSMPhone(CDMAPhone),Phone对象所提供的功能协议,以及对下层支撑环境的要求都有一个统一的描述,这个描述的实现就是靠RIL来完成适配,主要是通过Reference-ril.so来实现。总之,Android RIL提供了无线硬件设备与电话服务之间的抽象层。

[edit]Rild的基本框架

Android电话系统rild-概述篇_第2张图片

上图所示为Rild的基本框架图,建立了一个侦听Socket,等待客户端的连接,然后进入Eventloop循环,从该连接上读取RIL-Java成传递来的命令并转化成AT指令通过串口发送到Modem。同时在Readerlooper循环,等待Modem的回应,然后将结果通过socket传回到Ril-Java层。

[edit]Rild数据流

 

上图所示为ril-java发送一个电话指令到接收到modem的回应的过程,从图中可看出在AT通讯的过程中有两类响应:一种是请求后给出应答,如上图step4,一种是通知类,即为不请自来的,例如短信通知达到,我们称该类通知为URC。在Rild中URC和一般的Response是分开处理的。

[edit]Rild源码架构分析

Android电话系统rild-概述篇_第3张图片

上图是基于Qcom平台的 hardware/ril 目录下包含的rild相关代码。

1、include/telephony

  本目录下面的ril.h文件,定义了很多如下类型的宏:RIL_REQUEST_XXXX。这些宏代表客户进程向rild发送的命令,包括SIM卡相关的功能,打电话,发短信,网络信号查询等

2、目录hardware/ril/libril

  本目录下代码负责与客户进程进行交互。在接收客户进程命令后,调用相应函数对命令进行处理,再将命令的相应结果传回客户进程。收到网络的通知即URC也传回给客户进程。

3、目录hardware/ril/reference-ril

  本目录下的代码主要负责与modem进行交互,将libril传来的命令转为AT命令再发给modem,也负责读取modem发过来的相应。

4、目录hardware/ril/rild

  本目录下的代码是rild守护进程,开机时被init进程启动,负责完成ril初始化工作,加载ril动态库*.so。

你可能感兴趣的:(Android电话系统rild-概述篇)