11.1 RIL 简介 287
1
2
3
4
5
13
6
7
8
9
10
11
12
1. 电话相关的应用程序
这部分是高层的应用程序,主要包括电话拨号器和短信,实现了多个核心功能。谷歌将实现
某种功能的代码称为跟踪器(tracker):通话跟踪器、短信分配器、服务跟踪器和数据跟踪器等。
通话跟踪器处理语音通话,比如拨打或者挂断电话。短信分配器负责处理短信与彩信消息。服务
跟踪器负责蜂窝连接,比如设备是否已经连接到网络,接收级别是多少,是否在漫游中,等等。
数据跟踪器则负责数据连接(移动上网)。这些电话的应用程序与下一层(应用程序框架层)直
接通信。
2. 应用框架层
在应用框架层中,RIL 的组件主要有两类功能:第一,提供电话相关应用程序与 RIL 守护程
序之间的通信接口;第二,对不同移动网络中的各种概念进行抽象。开发应用程序时,开发者可
以通过 android.telephony 包提供的方法来使用这些抽象概念。
3. 用户空间的本地组件
用户空间的组件主要包括 RIL 守护程序及其支持库。RIL 守护程序是本章的重点阐述对象,
在 11.1.5 节和 11.1.6 节中会进一步介绍。
4. 内核
Linux 内核包含了电话栈的最底层组件,主要是基带硬件的驱动程序。这些驱动主要向用户
空间代码提供一个与基带进行对话的接口。该接口通常是一个串行链路,本章后面会详细介绍。
11.1.4 对电话栈的定制
Android 电话栈中的各层都可以定制,其中一些是必须定制的,比如基带驱动程序与设备硬
件的适配。除此之外,设备厂商通常也会对其他不必修改的部分进行定制,常见的有替换拨号器、
替换或者修改原有的短信与彩信软件等。还有一些厂商会对电话相关的框架层核心代码进行频繁
改动。从安全的角度来看,这些定制和修改产生的新代码尤其有价值,因为它们大多是闭源的,
而且可能并尚未经过安全研究者的审计。
11.1.5 RIL 守护程序
RIL 中最重要的组件是 RIL 守护程序(rild)。RIL 守护程序是一个系统核心服务,以本地
Linux 进程的形式运行,主要功能是在 Android 电话框架层与设备硬件之间建立连接。具体方式
是通过名为 Binder 的 IPC 机制向框架层提供接口。其开源部分的源代码位于 AOSP 源码仓库的
hardware/ril 目录下。
由于谷歌的特意设计,rild 良好地支持第三方闭源的硬件代码接口。为了做到这一点,rild
提供了由一系列函数调用和回调构成的一整套 API。启动时,rild 会加载设备厂商提供的 vendor-ril
共享库。在 vendor-ril 中,厂商实现了具体硬件的相关功能。
RIL 守护程序是 Android 设备中少数由 init 进程管理的服务之一。因此,它会在系统引导时
启动;一旦进程意外终止,还会重新启动。与一些系统服务不同的是,RIL 守护进程的崩溃通常