0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在LINUX平台上进行成功实现RIL层功能和框架层应用

电子设计 作者:电子设计 2018-11-08 09:05 次阅读

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的意义

目前很多基于L I N U X平台的系统,如:

PC(LINUX操作系统),QT,路由器平台(如O p e n W r t系统)等等,都对连接3 G网络有需求,但在这些平台原生的功能中,没有独立的RIL接口层,所以开发一套基于LINUX的独立应用,用来支持与基带发起各种3G网络相关业务是很有意义的.Android RIL具有良好的稳定性,独立性,以及对3G网络业务的完整性,所以将其移植成一个独立的,供LINUX通用平台使用的RIL层,可方便所有的基于LINUX的平台完成各种电话应用的开发.

2.Android系统中RIL层分析

2.1 RIL层在Android系统中的位置

RIL在Android系统中,处于硬件抽象层位置.主要通过SOCKET通信连接框架层,将框架层下发的消息解析后,向基带下发相应的AT指令,并将从基带返回的AT指令的响应,封装成消息,返回给框架层.位置如图1所示.

在LINUX平台上进行成功实现RIL层功能和框架层应用

2.2 Android RIL工作原理

2.2.1 Android RIL代码说明

RIL主要由RILD(radio interface layerdaemon)守护进程和两个动态库:librefrence_ril.so和libril.so组成.Android工程源代码目录中,RIL代码包含于hardware/ril目录中,主要文件说明如表1所示.

2.2.2 Android RIL工作原理

rild以一个main函数作为整个RIL层的入口点,负责完成初始化.libril.so库包含了主要的消息循环流程,主要负责与框架层进行交互,在接收框架层命令后,调用相应函数处理,然后将命令响应结果传回客户进程.

librefrence_ril.so主要提供各个具体业务的AT指令的封装和解析接口,供libril调用,向下通过AT_COM和基带进行交互.具体工作线程如图2所示.

在LINUX平台上进行成功实现RIL层功能和框架层应用

3.移植Android RIL层功能

通过对Android RIL层代码分析, 在RIL层主要使用了基于linux的POSIX Thread(pthread)多线程编程和socket IPC通信,这些在移植过程中是无须考虑的.需要移植的是RIL层依赖于Android系统的功能.

3.1 移植Android系统属性

系统属性系统的一个重要特性.属性数据由init进程维护,用于管理系统全局配置和状态,每个属性对应一对键值.

在RIL层中对系统属性的依赖比较小,所以不需要将Android系统属性机制全部移植.RIL层主要在RILD初始化过程中需要从系统属性读取reference-ril.so路径.AT设备路径,网卡设备等信息,以及运行过程中将从网络中动态获取的IP和DNS等信息写入对应系统属性中.

可根据所处的具体系统,将需要的信息写入系统保存全局共享参数的机制,并根据所处系统的配置方法去获取需要的参数.由于RIL层需要获得的参数非常有限,所以同样可以配置RIL层独有的配置文件,通过配置和解析RIL层的配置文件来达到替换Android系统属性机制.甚至可直接在rild启动的时候,作为应用参数直接传入.

3.2 移植Android.mk编译文件

Android. m k机制是Android平台利用makefile封装成一种特有的编译机制,在通用linux平台上,通常每个模块都有自己的Makefile文件.所以我们需要根据。/libril../reference-ril和。/rild文件夹中的Android.

mk内容写出对应的Makefile文件.从本质上来讲,Android.mk就是对Makefile的的一部分,所以移植编译文件是很简单的.

. / l i b RIL和。 / reference – RIL中的Android.mk描述了libril.so和libreferenceril.

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.Filedescriptor等,这些数据在传输过程中需要做特殊处理,移植的依赖较多,好在RIL部分用不到Binder通信,所以这部分代码可以从中删除,降低了移植难度,所以只需要实现普通数据的消息封装.在Parcel中对普通数据的读写,定义了以下方法:

在LINUX平台上进行成功实现RIL层功能和框架层应用

基本数据的消息封装通过这些方法来写入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是无法进行移植的,所以需要开发一个与AndroidTelephony对等的框架层.

框架层主要起连接RIL层和应用的作用,框架内部分为了客户端和服务端,客户端封装成共享库提供函数接口供应用程序使用,函数内部通过socket与服务端通信,服务端可以支持多个客户端同时连接,并将客户端的请求串行化发送到RILD,能够将RILD返回的结果异步地将返回给对应的请求客户端.为避免阻塞,服务端由三个线程来实现,如图3所示.线程一(accept_thread):接收上层应用下发的消息.将应用接入的clients排序,并将发送的消息存入链表data_queue中;线程二(sender_thread):将应用消息写入与RIL层的接口.依次从链表data_queue中取出消息,并依次写入到RIL层的接口;线程三(receiver_thread):将RIL的response写回应用.从RIL层的接口中读出消息,并判断出所属的应用描述符,并写入.

在LINUX平台上进行成功实现RIL层功能和框架层应用

4.搭建验证平台

OpenWrt系统是一个运行在嵌入式设备上的LINUX系统,主要实现路由器功能,所以PSDATA是其最基本的业务.将OpenWrt系统移植到ARM开发板上,并加载基带模块.通过移植的RIL层代码,使开发板成功连入3G网络.驱动枚举出/dev/设备作为AT_COM与RIL层通信,并创建网卡设备作为网络通信设备,如图4所示.编写应用创建SOCKET,并连入框架层的服务端,并在应用中将PS DATA请求写入Parcel.

在LINUX平台上进行成功实现RIL层功能和框架层应用

在系统中成功ping通网络,验证了移植后的RIL层在LINUX平台上运行良好.

5.总结

在基于LINU X的通用平台上,通过移植工作,成功实现RIL层功能和框架层应用.在Android RIL中定义了电话.短信.PS DATA等100多种与基带通信业务.在平台上便可根据功能需求向RIL层发起所需请求,便能简单.方便.高效的完成这些定义好的业务.移植后的RIL层将所有的LINUX平台与基带建立连接,实现了通用性.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3924

    浏览量

    127148
  • Linux
    +关注

    关注

    87

    文章

    11230

    浏览量

    208937
  • 无线
    +关注

    关注

    31

    文章

    5431

    浏览量

    173092
收藏 人收藏

    评论

    相关推荐

    Linux平台设备框架驱动

    平台设备框架(platform)是将一个驱动分为设备和驱动两个部分,通过总线模型将设备和驱动进行绑定。
    的头像 发表于 09-25 08:59 1762次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>平台</b>设备<b class='flag-5'>框架</b>驱动

    想要学习DSP的平台上进行图像处理,求推荐入门教材。

    各位大神,本人想要学习DSP的平台上进行图像处理,但基础比较差。图像处理的算法是有基础的,但是总觉得这两者结合很困难,希望大神告诉我下有什么好方法入门,或者看哪些教材
    发表于 05-20 10:29

    Android RIL架构简介

    对接BPRIL—radiointerface layer1、说的简单点,RIL是为了适应各种Modem的一个适配,无论你是高通,MTK,马维尔等,通过他都可以直接面向用户。这里说的是整个RIL
    发表于 09-25 15:46

    嵌入式操作系统的通用硬件抽象设计

    的开发能够支持这种硬件平台的硬件抽象上进行。2 通用硬件抽象总体设计2.1 通用硬件抽象
    发表于 12-07 10:30

    MTK平台上实现2ME需要哪些功能

    J2ME是什么?MTK平台上实现J2ME运行环境,需要哪些功能?怎样去设计并实现J2ME运行平台
    发表于 04-27 06:22

    怎样阿里云物联网平台上进行单片机程序的编写呢

    阿里云物联网平台是怎样设置的?怎样阿里云物联网平台上进行单片机程序的编写呢?
    发表于 02-22 06:04

    【学习打卡】OpenHarmony的系统服务说明

    一次性开发多设备部署的能力,从而为开发人员提供了很大的灵活性。开发人员可以开发一次应用程序,然后将其部署到一系列设备上。这避免了不同平台上重复开发的问题,开发者可以有效地利用了已经创建的内容去进行
    发表于 07-13 08:48

    酷派手机拥抱鸿蒙,成功展讯T606平台上接入OpenHarmony

    最新消息,酷派技术团队宣布已成功实现将 OpenHarmony 系统接入到展讯平台上,相信这是一个重要的里程碑,标志着推动 OpenHarmony 的发展环节取得了重要进展。
    发表于 11-21 13:51

    RRC功能

    RRC功能 RRC实现功能包括:􀁺 广播由非接入提供的信息;
    发表于 11-28 17:15 3835次阅读

    基于Android平台的双网双待的设计方法

    实现Android 平台上的双网双待功能,研究Android 平台的系统架构以及Android framework 上已经
    发表于 05-24 11:02 2844次阅读
    基于Android<b class='flag-5'>平台</b>的双网双待的设计方法

    嵌入式控制器CORBA平台的应用实现

    整个控制器包括应用和系统。系统包含硬件和相关的实时操作系统以及应用平台,应用包含运行于应用平台上
    发表于 10-15 10:39 1035次阅读

    如何在Android 4.3平台上进行蓝牙低功耗开发操作?(1)

    Android 4.3平台上进行蓝牙低功耗(BLE)开发 第一部分
    的头像 发表于 08-22 01:33 2754次阅读

    Linux应用操作寄存器

    。 devmem的实现原理,就是打开/dev/mem,然后通过mmap映射物理地址,从而实现读写寄存器。因此,我们只要实现这些操作,就可以自己实现类似devmem的
    的头像 发表于 10-08 15:16 1173次阅读
    <b class='flag-5'>Linux</b>应用<b class='flag-5'>层</b>操作寄存器

    无线通信模块管理框架RIL简介

    大家好,今天分享一个开源框架 RIL(Radio Interface Layer),嵌入式平台的无线通信模块管理框架
    的头像 发表于 12-21 09:24 1930次阅读
    无线通信模块管理<b class='flag-5'>框架</b><b class='flag-5'>RIL</b>简介

    OSI七模型的每一功能

    : 物理(Physical Layer) 功能 :物理负责物理媒介上传输原始的比特流。这包括定义电气、机械、过程和功能标准,以
    的头像 发表于 11-24 10:46 167次阅读