logo资料库

将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
将Android平台的RIL层 移植到基于LINUX的通用平台的研究与实现 探索与观察 》》 【摘要】本文通过对Android RIL层代码分析,将android RIL层功能在纯LINUX平台上实现,完全脱离了Android系统。为基于LINUX的通用平台实现一套成熟的RIL层代 码,并开发出相应的框架层,以便基于LINUX的平台能快速成熟的向3G网络发起相关业务。在OpenWrt系统上验证了移植后的RIL层代码正常工作。 【关键词】Android RIL;LINUX;移植;Parcel;验证 重庆邮电大学 赵国强 彭大芹 1.课题研究的背景和意义 1.1 Android RIL简介 Android RIL(Radio Interface Layer) 提供了无线基带Modem与电话应用之间的抽象 层。在Android RIL层中,完善的考虑了电话应 用的各种情况,如:双SIM卡;电话,短信, 彩信,PS DATA业务,PIN/PUK码等各种3G网络 业务。 RIL层在Android系统中,处于硬件抽象 层,运行在一个独立的守护进程中,主要为框 架层和基带接口提供适配,具有良好的独立 性。其中的通信机制,与框架层接口主要使用 Socket通信,内部线程主要使用管道,与基带 接口默认使用AT命令。且其代码均由C和C++来 完成,依赖第三方库较少,所以,Android RIL 层具有良好的移植性。 1.2 移植Android RIL的意义 目前很多基于LINUX平台的系统,如: PC(LINUX操作系统),QT,路由器平台(如 OpenWrt系统)等等,都对连接3G网络有需 求,但在这些平台原生的功能中,没有独立的 RIL接口层,所以开发一套基于LINUX的独立应 用,用来支持与基带发起各种3G网络相关业务 是很有意义的。Android RIL具有良好的稳定 性,独立性,以及对3G网络业务的完整性,所 以将其移植成一个独立的,供LINUX通用平台 使用的RIL层,可方便所有的基于LINUX的平台 新桌面映像、管理用户数据,并监控其创建的 虚拟桌面。客户端使用VMware View Client程 序,通过PCoIP显示协议回传运行结果。该协 议是一种高性能自适应显示协议,可应用在3D 图形设计、Flash领域,即使在低带宽下,也 能保持稳定的显示。由于它的优异性能,被许 多远程显示方案所采用,包括其他桌面虚拟化 产品供应商。 我公司可以先采取试点方式应用桌面虚拟 化技术,可以选择教育培训中心试点,学校的 应用场景非常适合这一技术。根据试点效果, 再逐步推广。 目前,桌面虚拟化技术大规模应用是所谓 的“桌面云”,在华为上海研究所有1万名员 工在使用华为自身研制的这种运用云计算平台 的虚拟桌面。上海联通和浙江移动也在批量使 用这种桌面云。 当前虚拟化应用中的另一个热点,是数据 中心虚拟化,这是全新的数据中心部署和管理 方式,有以下优势。 1.能够实现一定程度的自动化运行,降 低人工干预频率,同时提供简单强大的管理界 面,使管理员摆脱繁重的与物理服务器、操作 系统、中间件等的配置和管理工作,专注于应 完成各种电话应用的开发。 2.Android系统中RIL层分析 2.1 RIL层在Android系统中的位置 RIL在Android系统中,处于硬件抽象层位 置。主要通过SOCKET通信连接框架层,将框架 层下发的消息解析后,向基带下发相应的AT指 令,并将从基带返回的AT指令的响应,封装成 消息,返回给框架层。位置如图1所示。 2.2 Android RIL工作原理 2.2.1 Android RIL代码说明 RIL主要由RILD(radio interface layer daemon)守护进程和两个动态库:librefrence_ ril.so和libril.so组成。Android工程源代码目 录中,RIL代码包含于hardware/ril目录中,主 要文件说明如表1所示。 rild以一个main函数作为整个RIL层的入 口点,负责完成初始化。libril.so库包含了 主要的消息循环流程,主要负责与框架层进行 交互,在接收框架层命令后,调用相应函数 处理,然后将命令响应结果传回客户进程。 librefrence_ril.so主要提供各个具体业务的 AT指令的封装和解析接口,供libril调用,向 下通过AT_COM和基带进行交互。具体工作线程 如图2所示。 3.移植Android RIL层功能 通 过 对 A n d r o i d R I L 层 代 码 分 析 , 在 RIL层主要使用了基于linux的POSIX Thread (pthread)多线程编程和socket IPC通信, 这些在移植过程中是无须考虑的。需要移植的 是RIL层依赖于Android系统的功能。 2.2.2 Android RIL工作原理 3.1 移植Android系统属性 表1 RIL主要文件说明(./表示处于hardware/ril目录下) 文件路径 ./include/telephony ./libril ./reference-ril ./rild 用管理。 文件名 ril.h ril_commands.h ril_unsol_commands.h ril.cpp ril_event.h ril_event.cpp atchannel.h atchannel.c reference-ril.c at_tok.h at_tok.c misc.h misc.c rild.c 文件说明 框架层和RIL层接口和数据结构定义 请求命令描述列表 主动上报时间描述列表 主要负责与框架层交互 数据结构和函数声明 处理event loop事件 数据结构和函数声明 主要负责与modem通信 主要负责应用与基带间的数据通信 AT指令解析处理函数声明 AT指令解析处理函数 AT指令解析处理函数声明 AT指令解析处理函数 rild守护进程 2.实现动态调度资源。对于管理员而言, 虚拟化的数据中心不再是一台台隔离的服务 器,而是一个统一的资源池,而且具备伸缩 性。管理程序能够根据应用的负载情况自动调 整分配资源,提升资源利用率。 3.加速应用的部署,提高业务响应速度。 4.通过虚拟化整合,可以将应用集中,提 高服务器的利用率,减少服务器,从而降低制 冷、通风等耗电量,达到绿色减排目的。 这些优势非常有现实意义。2009年中化 集团升级ERP系统,当时他们的ERP系统是SAP R/3 4.7版,计划升级到6.0版。由于中化的业 务中,当时已有93%通过ERP来执行。如何不中 断业务,实现平稳升级成为中化集团面对的难 题。经过研究,他们最终采用IBM的私有云方 案。他们对3个数据中心实施虚拟化改造,将 所有资源池化,由IBM的数据中心管理软件统 一管理,将动态的、分散的资源集中调度和 灵活分配,跨越2个数据中心的云环境得以实 现。私有云使得中化集团在ERP系统不停机, 没有增加新服务器的限制下,实现平稳升级。 中化实现私有云,还能实现未来包括ERP在内 的各种IT应用的灵活运行。中化私有云对我们 公司的IT运维有很好的示范作用。 应用虚拟化技术,实现PC桌面、交换、数 据中心的虚拟化乃至建设私有云能够让企业拥 有统一的、可管理的、具备弹性伸缩的IT基础 架构。这对企业IT应用有重要意义,这能大幅 提升运维效率,提高资源利用率,降低系统运 营成本,还能灵活应对新业务需求。在必要的 时候可以对接公有云,直接租用公有云计算供 应商的资源,弥补不足。未来,随着虚拟化和 云计算技术的进一步发展和应用,采用虚拟化 技术的面向云计算的企业IT基础设施在运维时 会有更大优势。我们作为企业的IT部门应当及 早研究和应用虚拟化和云计算技术,助力公司 信息化建设。 参考文献 [1]《虚拟化与云计算》小组.虚拟化与云计算[M].电子 工业出版社,2009. [2]樊勇兵,丁圣勇,陈天,等.解惑云计算[M].人民邮电出 版社. [3]张为民,唐剑峰,罗治国,等.云计算深刻改变未来[M]. 科学出版社. [4]雷万云.云计算——企业信息化建设策略与实践[M]. 清华大学出版社. -9-
探索与观察 系统属性是Android系统的一个重要特 性。属性数据由init进程维护,用于管理系统 全局配置和状态,每个属性对应一对键值。 在RIL层中对系统属性的依赖比较小,所以不 需要将Android系统属性机制全部移植。RIL层 主要在RILD初始化过程中需要从系统属性读取 reference-ril.so路径、AT设备路径,网卡设 备等信息,以及运行过程中将从网络中动态获 取的IP和DNS等信息写入对应系统属性中。 可根据所处的具体系统,将需要的信息写 入系统保存全局共享参数的机制,并根据所处 系统的配置方法去获取需要的参数。由于RIL 层需要获得的参数非常有限,所以同样可以配 置RIL层独有的配置文件,通过配置和解析RIL 层的配置文件来达到替换Android系统属性机 制。甚至可直接在rild启动的时候,作为应用 参数直接传入。 3.2 移植Android.mk编译文件 A n d r o i d . m k 机 制 是 A n d r o i d 平 台 利 用 图1 RIL在Android系统中的位置 图2 Android RIL工作原理 图3 框架层结构设计 图4 基于OpenWrt系统搭建的验证平台 -10- 请求串行化发送到RILD,能够将RILD返回的 结果异步地将返回给对应的请求客户端。为 避免阻塞,服务端由三个线程来实现,如图 3所示。线程一(accept_thread):接收上 层应用下发的消息。将应用接入的clients排 序,并将发送的消息存入链表data_queue中; 线程二(sender_thread):将应用消息写入 与RIL层的接口。依次从链表data_queue中取 出消息,并依次写入到RIL层的接口;线程三 (receiver_thread):将RIL的response写回 应用。从RIL层的接口中读出消息,并判断出 所属的应用描述符,并写入。 4.搭建验证平台 OpenWrt系统是一个运行在嵌入式设备上 的LINUX系统,主要实现路由器功能,所以PS DATA是其最基本的业务。将OpenWrt系统移植 到ARM开发板上,并加载基带模块。通过移植 的RIL层代码,使开发板成功连入3G网络。驱 动枚举出/dev/设备作为AT_COM与RIL层通信, 并创建网卡设备作为网络通信设备,如图4所 示。编写应用创建SOCKET,并连入框架层的服 务端,并在应用中将PS DATA请求写入Parcel。 在系统中成功ping通网络,验证了移植后的 RIL层在LINUX平台上运行良好。 5.总结 在基于LINUX的通用平台上,通过移植 工作,成功实现RIL层功能和框架层应用。在 Android RIL中定义了电话、短信、PS DATA等 100多种与基带通信业务。在平台上便可根据 功能需求向RIL层发起所需请求,便能简单、 方便、高效的完成这些定义好的业务。移植后 的RIL层将所有的LINUX平台与基带建立连接, 实现了通用性。 参考文献 [1]Google Home Page,http://www.android.com/. [2]杨丰盛.Android技术内幕·系统卷[M].北京:机械工业 出版社,2011,5. [3]Sangchul Lee,Jae Wook Jeon.Evaluating Performance of Android Plateform Using Native C for Embedded Systems.International Conference on Control,Automation and Systems 2010 Oct.27-30,2010 in KINTEX,Gyeonggi- do,Korea. [4]OpenWrt Home Page,http://www.OpenWrt.org/. [5]B.Weinberg,“Uniting mobile linux application platforms,”Linux Pundit,2008. [6]M.Godfrey and Q.Tu,“Evolution in open source software:a case study,”in Software Maintenance,2000. Proceedings.International Conference on,2000,pp.131-142. 作者简介: 赵国强(1990—),男,四川巴中人,重庆邮电大学 通信学院通信与信息系统专业在读研究生,研究方 向:移动通信。 彭大芹,重庆邮电大学通信与信息工程学院正高级工 程师,主要研究方向:移动通信。 makefile封装成一种特有的编译机制,在通 用linux平台上,通常每个模块都有自己的 Makefile文件。所以我们需要根据./libril、./ reference-ril和./rild文件夹中的Android. mk内容写出对应的Makefile文件。从本质上来 讲,Android.mk就是对Makefile的的一部分,所 以移植编译文件是很简单的。 . / l i b r i l 和 . / r e f e r e n c e - r i l 中 的 Android.mk描述了libril.so和libreference- ril.so两个动态库的生成和安装路径。./rild 中的Android.mk描述了rild守护进程的生成和 安装路径和链接libril.so库。 3.3 移植Parcel消息 由以上对Android RIL层功能分析发现, 框架层和RIL层的交互是通过socket消息来互 相传递的。消息作为IPC通信的数据单元是通 过Parcel容器来进行封装的,用于存储序列化 数据。所以在移植过程中,完成相同的消息机 制,是整个移植工作的核心任务。源码位于 Frameworks/base/libs/binder/parcel.cpp。 分析源码可知:1、整个读写全是在内存中 进行,主要根据数据大小需求通过malloc()、 realloc()、memcpy()等内存操作动态分配,这 些接口都是标准C所具备的,移植性非常好;2、 Binder通信中数据对象都是封装成为parcel格 式进行传输的,传输的类型包括IBinder、File descriptor等,这些数据在传输过程中需要做特 殊处理,移植的依赖较多,好在RIL部分用不到 Binder通信,所以这部分代码可以从中删除, 降低了移植难度,所以只需要实现普通数据的 消息封装。在Parcel中对普通数据的读写,定义 了以下方法:writeByte(byte),readByte(), writeDouble(double),readDouble(), writeFloat(),readFloat(),writeInt(int), readInt(),wirteLong(long),readLong(), writeString(String),readString()。基本数 据的消息封装通过这些方法来写入Parcel和从 Parcel读出。由于AT指令的参数以及AT response 均为Int和String型数据,所以在RIL层中主要 使用到了对这两种数据操作的方法。所以通过 C++代码实现一个容器,并含有writeInt(int), readInt(),writeString(String),readString() 四种处理数据的方法是非常简单的。所以通过自 己实现的类来模拟Android在RIL层中的消息机制 是可行的。 3.4 开发框架层 综上所述,将Android RIL移植到基于 LINUX的通用平台就完全能够实现了。RIL只 能支持一路socket连接,事物处理都是串行 的,要让其工作在多任务的系统上,互相不阻 塞对方,需要更上层进行封装,Android的移 动通信相关业务流程以及策略控制都是在框架 层是通过JAVA代码实现的,在Android中叫做 Telephony,Telephony为上层应用提供了并 行访问的接口,但一般LINUX平台是没有运行 JAVA虚拟机的,所以Android的Telephony是无 法进行移植的,所以需要开发一个与Android Telephony对等的框架层。 框架层主要起连接RIL层和应用的作用, 框架内部分为了客户端和服务端,客户端封装 成共享库提供函数接口供应用程序使用,函 数内部通过socket与服务端通信,服务端可 以支持多个客户端同时连接,并将客户端的
分享到:
收藏