Telephony解析之整体架构简介

本文代码基于Android 9.0

Telephony概述

Android系统是主流的手机操作系统,手机在人们生活中的的存在最不可忽视的功能就是通信,Android系统中的的Telephony为此功能的核心模块,Telephony主要提供了语音,短信,数据链接,SIM卡管理,电话簿等功能

Telephony架构由上到下可分为4层:

telephonyjg

应用层(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 层

RILD

RILD是一个可执行程序,作为守护进程运行在系统中,进程内配合RIL Lib和Vendor RIL实现了RIL的所有功能,它通过Socket与应用框架层进行通信,守护进程内部会初始化Vendor RIL,同时管理所有的电话相关的请求、主动上报、请求 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 卡,直接上电即可工作,自动完成初始的找网、网络注册等工作,完成之后即可打电话、发短信等

总结

通过这篇文章介绍,可以了解整个Telephony的分层架构,以此为基础可划分Telephony相关的各个主线,进行各个击破