详细说明Android手机的种种特性

移动开发 Android
Android的RIL驱动模块, 在hardware/ril目录下,一共分rild,libril.so以及librefrence_ril.so三个部分。

Android作为一个高效的.NET程序语言。其混合了函数语言和物件导向程序编制语言,并且完美的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。

都依赖于include目录中ril.h头文件。目前cupcake分支上带的是gsm的支持,另有一cdma分支,这里分析的是gsm驱动。GSM模块,由于Modem的历史原因,AP一直是通过基于串口的AT命令与BB交互。包括到了目前的一些edge或3g模块,或像omap这类ap,bp集成的芯片,已经使用了USB或其他等高速总线通信。

但大多仍然使用模拟串口机制来使用AT命令。这里的RIL(Radio Interface Layer)层,主要也就是基于AT命令的操作,如发命令,response解析等。(gprs等传输会用到的MUX协议等在这里并没有包含,也暂不作介绍。)

以下是详细分析,因为篇幅原因,会以连载形式发布出来(大概3篇),本文主要涉及基本架构和初始化的内容,首先介绍一下rild与libril.so以及librefrence_ril.so的关系:

1. rild:
仅实现一main函数作为整个ril层的入口点,负责完成初始化。

2. libril.so:
与rild结合相当紧密,是其共享库,编译时就已经建立了这一关系。组成部分为ril.cpp,ril_event.cpp。libril.so驻留在rild这一守护进程中,主要完成同上层通信的工作,接受ril请求并传递给。

3. librefrence_ril.so:
rild通过手动的dlopen方式加载,结合稍微松散,这也是因为librefrence.so主要负责跟Modem硬件通信的缘故。这样做更方便替换或修改以适配更多的Modem种类。

它转换来自libril.so的请求为AT命令,同时监控Modem的反馈信息,并传递回libril.so。在初始化时, rild通过符号RIL_Init获取一组函数指针并以此与之建立联系。

4. radiooptions:
radiooptiongs通过获取启动参数, 利用socket与rild通信,可供调试时配置Modem参数。

接下来分析初始化流程,主入口是rild.c中的main函数,主要完成三个任务:
1. 开启Android中的event机制, 在RIL_startEventLoop中,是最核心的由多路I/O驱动的消息循环。

2. 初始化librefrence_ril.so,也就是跟硬件或模拟硬件modem通信的部分(后面统一称硬件), 通过RIL_Init函数完成。

3. 通过RIL_Init获取一组函数指针RIL_RadioFunctions, 并通过RIL_register完成注册,并打开接受上层命令的socket通道。

每个ril_event结构,与一个fd句柄绑定(可以是文件,socket,管道等),并且带一个func指针去执行指定的操作。具体流程是: ril_event_init完成后,通过ril_event_set来配置一新ril_event,并通过ril_event_add加入队列之中(实际通常用rilEventAddWakeup来添加)。

add会把队列里所有ril_event的fd,放入一个fd集合readFds中。这样ril_event_loop能通过一个多路复用I/O的机制(select)来等待这些fd, 如果任何一个fd有数据写入,则进入分析流程processTimeouts(),processReadReadies(&rfds, n),firePending()。

 后文会详细分析这些流程,另外我们可以看到, 在进入ril_event_loop之前, 已经挂入了一s_wakeupfd_event, 通过pipe的机制实现的, 这个event的目的是可以在一些情况下,能内部唤醒ril_event_loop的多路复用阻塞。

比如一些带timeout的命令timeout到期的时候。至此第一个任务分析完毕,这样便建立起了基于event队列的消息循环,稍后便可以接受上层发来的的请求了(上层请求的event对象建立,在第三个任务中)。

【编辑推荐】

  1. Android应用程序组建原理深入剖析
  2. Android SMS短信服务相关概念简述
  3. PythonAndroid数据库相关代码解读
  4. PythonAndroid安装卸载程序具体操作方法解析
  5. Android应用程序的四个关键点
责任编辑:chenqingxiang 来源: 博客园
相关推荐

2009-12-28 09:19:21

ADO属性

2010-01-08 15:37:59

JSON数据

2010-03-03 18:17:01

Android手机服务

2010-03-05 14:43:22

Android浏览器

2010-02-04 14:41:52

Android菜单类型

2010-03-03 16:37:49

Android智能手机

2010-03-05 14:16:38

Android设计平台

2010-02-04 15:20:50

Android SDK

2010-02-04 09:55:46

Android DEX

2010-02-06 17:43:51

Android应用

2010-02-06 15:53:55

2014-09-16 09:57:56

INotifyProp

2010-02-05 17:34:37

Android 2.1

2010-03-05 15:58:11

操作系统Android

2010-03-05 13:54:09

2010-02-06 16:57:43

Android操作系统

2010-03-03 17:11:08

2010-02-05 17:04:31

Android版本

2009-12-28 09:26:09

ADO对象

2009-12-08 17:34:25

WCF的配置
点赞
收藏

51CTO技术栈公众号