Android Telephony框架详解
Android Telephony框架详解
Android系统的Telephony框架是实现手机通讯功能的核心组件,从应用层到驱动层,每一层都有其独特的功能和作用。本文将详细介绍Android Telephony框架的各个层次,帮助读者理解手机通讯功能的实现原理。
一、简介
无论手机发展到如何智能的程度,最关键和重要的功能仍然是通讯,具体来说就是打电话、发短信、上网功能的使用。而整个Android通讯的框架从下往上可以分为4个层次:
- 1、Modem——这是整个通讯的硬件基础,需要Modem芯片,不同制式需要采用不同的Modem;
- 2、RIL——为了适配不同的Modem芯片而抽象出来的中间层,用于将Modem指令转换为Java可用的数据流;
- 3、Framework中的Telephony——这是在Framework层搭建的通讯框架,面向开发者提供操作通讯事务的能力;
- 4、Application——这是最上层的应用,直接面向用户,提供拨号、上网、发短信的界面;
二、应用层(Application)
面向用户的应用层,依赖于应用框架层,通过访问Telephony应用框架层的业务模块来呈现给用户具体的功能,主要包括Phone、Contacts、SMS等应用。Phone比较特殊,系统启动时就被运行起来了,且Phone启动时会创建Telephony框架层,并与之运行在同一个进程中。
三、框架层(Framework)
Telephony应用框架层主要包括RILJ、Service、业务功能模块三个部分构成,提供了电话,短信,联系人等所需的所有功能。代码路径是:
/frameworks/base/telephony
android.telephony:外部应用可访问的Phone模块
com.android.internal.telephony:Phone应用和框架内部使用的Phone模块
1.RILJ
/frameworks/opt/telephony/src/java/com/android/internal/telephony/RIL.java
RIL.java是Telephony和本地RIL的通信接口,通过Socket(rild)完成电话服务命令的收发2.Service
Telephony基于IBinder提供了各种功能的Service,以便于业务功能模块的实现3.业务功能模块
Telephony业务功能模块主要包括语音、短信、ICC卡、网络服务以及数据连接等,这些功能模块是Android系统通话功能的核心和基础。注:整个Framework层的Telephony框架运行在一个叫做Phone(com.android.phone)的进程中。而这个进程是在packages\services\Telephony模块中被创建的
四、本地RIL层(RIL)
RIL(Radio Interface Layer)是Telephony框架层与Modem之间的接口层(属于HAL层),RIL将Modem提供的各种服务进行了抽象,以提供给Framework层统一的接口
RIL架构
1.RIL抽象层
实现RIL层框架,包括RILD守护进程和RIL库,定义了其与Framework层、Vendor RIL之间的接口2.RIL实现层
基于不同Modem厂商的RIL功能实现(Vendor RIL),其主要功能是接受RIL层的主动Request,转发给Modem,同时接受Modem返回的请求Response和主动上报事件,上报给RIL层
RILJ(Radio Interface Layer Java):
RILJ是Android系统中的一个Java库,用于处理与手机基带(Modem)通信的高层接口。它提供了一组Java接口,用于向基带发送命令、接收响应,并处理与手机网络通信相关的功能。RILJ通常运行在Android系统的应用层,与应用程序和系统服务进行交互,将高层的通信请求转换成与基带通信的底层命令。
RILD(Radio Interface Layer Daemon):
RILD是Android系统中的一个守护进程(Daemon),用于与手机基带进行底层通信。它负责管理与基带的通信通道,接收来自RILJ的请求并将其转发给基带,同时将基带的响应返回给RILJ。RILD通常运行在Android系统的底层,与基带硬件进行直接通信,实现手机网络功能的底层支持。
RILD是一个可执行程序,作为守护进程运行在系统中,进程内配合RIL Lib和Vendor RIL实现了RIL的所有功能,它通过Socket与应用框架层进行通信。守护进程内部会初始化VendorRIL,同时管理所有的电话相关的请求、主动上报、请求Response等事件,其主要功能如下:
- 1.Event处理框架(通过Select机制实现)
- 2.请求、数据下发(将RILJ通过Socket传过来的数据解成C语言数据结构,然后和请求下发给Vendor RIL处理)
- 3.Response、数据上报(将Vendor RIL上报的请求Response和主动上报事件打包通过Socket转发给RILJ层)
注:RIL和Modem之间交互,大部分厂商采用AT命令交互,也有其他的交互方式,例如高通使用了ONCRPC、QMI接口
五、驱动层(Modem)
RIL驱动用于实现电话功能,主要硬件是通信模块(Modem),Modem通过与通信网络进行沟通,传输语音及数据,完成呼叫、短信等相关电话功能。
目前的智能机在硬件上多采用双CPU的架构,一个是基带处理器,主要处理数字信号、语音信号的编码解码以及通信3协议,基带处理器、射频和其它外围芯片作为一个Modem模块,提供AT命令接口。
另一个是应用处理器,运行操作系统和各种应用程序。对于目前大部分的独立通信模块而言,无论是2G还是3G都已经非常成熟,模块化相当完善,硬件接口非常简单,也有着相对统一的软件接口。
一般Modem模块装上SIM卡,直接上电即可工作,自动完成初始的找网、网络注册等工作,完成之后即可打电话、发短信等。