安卓系统WIFI模块的优化

2017-05-17 02:20李宁
韶关学院学报 2017年3期
关键词:中间层应用层驱动程序

李宁

安卓系统WIFI模块的优化

李宁

(安徽财贸职业学院云桂信息学院,安徽合肥230601)

笔者完成了安卓系统的移植,重新设计并优化了安卓系统的WIFI模块程序,提高了安卓系统的续航时间,并加强了安卓系统对WIFI模块的支持,通过测试表明,该系统运行稳定,具有较强的实用性.

安卓系统;WIFI;安卓系统移植;WIFI驱动

移动互联网使人们可以随时随地的无线上网,在此背景下移动互联网逐渐成为各大互联网公司争相竞争的主战场.各IT巨头纷纷推出自己的移动操作系统,如微软公司推出的Window phone操作系统,苹果公司推出的IOS操作系统,都得到了众多用户的认可和使用,其中最为突出的是Google公司推出的安卓操作系统,其系统的开源性和兼容性,使得该系统迅速占领智能手机市场,并且市场份额在逐年递增.随着智能设备的不断普及,之前的GPRS等2G网络方式已经无法满足人们的需求,于是4G,WIFI等高速的接入方式开始普及.WIFI技术是一种近距离无线传输技术,它速度快,连接稳定,价格便宜的特点,让其受到各大厂商和用户的青睐.

将WIFI驱动程序移植到安卓系统内核中,并对安卓系统中的WIFI程序进行分析和改进,增强了安卓系统对WIFI模块的支持,对安卓系统WIFI模块的开发提供了参考.

1关键技术介绍

1.1WIFI技术介绍

WIFI全称是Wireless Fidelity,属于短距离无线传输的一种,现在最新的标准IEEE802.11ac,此标准是在IEEE802.11a标准之上建立起来的,能够支持最大8倍MIMO,并支持多个终端以MIMO方式连接,同时其支持2.4 GHz和5 GHz频段,其无线传输速率最高可达1.3 Gbps,已经超过了千兆的传输速度.同时,WIFI的造价低廉,厂商不用耗费资金进行网络布线接入,节省了大量的成本.WIFI的这些优点使其成为智能设备必不可少的一部分,也成为物联网中使用最广的通讯协议.

1.2安卓系统介绍

安卓系统是Google公司推出的面向移动设备的开源操作系统,其底层核心是Linux内核,向上的结构依次是中间件层,应用程序框架层和应用程序层[1].

安卓系统应用层和应用程序框架层采用Java语言开发,中间件层包含安卓运行时所需要的函数库和Dalvik虚拟机,Linux内核层是安卓系统软件与硬件连接的抽象层,提供硬件抽象功能,提供安全机制、内存管理、进程管理、网络协议堆栈和驱动程序等功能.

2安卓系统的移植

安卓系统移植的目标是使安卓系统能够运行在处理器中,安卓系统运行的核心文件是Bootloader,Linux内核和文件系统.Bootloader可以初始化硬件设备,建立内存空间映射图,为调用操作系统内核准备条件;Linux内核能够均衡的分配硬件资源给软件,统筹各进程的运行时间;文件系统主要是对文件进行管理,包含文件数据和结构.开发者可以根据产品的需要对安卓的内核进行裁剪,只留下产品需要的功能,从而提高内核的工作效率.在本系统中,采用三星的S3C6410 ARM处理器作为系统核心,外围电路包括电源管理模块,WIFI模块,UART串口模块,USB模块和网络接口模块.图1是此系统的硬件设计框架图.

安卓系统的内核是Linux内核,所以在Linux系统下进行编译.本系统选用Ubuntu作为安卓系统的编译主机系统,安卓系统的大部分代码是用Java语言编写,所以在系统中安装JAVA语言的运行环境,安装交叉编译工具链,对Uboot进行配置和编译,Android内核源代码和系统源代码,为后面系统移植建立开发环境.

图1系统硬件设计框架图

图2安卓系统与硬件的关系

2.1安卓系统内核的配置和编译

Linux是一个通用的操作系统内核,当这个内核应用在已嵌入式系统为主的移动设备中时,既要保留传统标准的内容,又有优化和改进的必要.安卓系统中的Linux内核的目标是:标准化Linux内核与具体设备场景的结合[2].安卓的内核设计标准遵从标准Linux的结构,充分利用已有的机制,尽量使用标准化的内容,并对多种外设做出必要的扩展.安卓系统的Linux内核中默认包含多种硬件的驱动程序,以提供对多种硬件的支持.在安卓系统中,笔者设计了一个硬件抽象层,作为驱动程序到安卓系统的标准接口,此接口的作用是将硬件和软件连接起来.图2为安卓系统与硬件的关系框架图,从图2中可以发现,安卓系统内核的移植工作,其实就是对驱动程序和硬件抽象层的实现.

系统主要是针对WIFI模块进行开发,需要对安卓系统内核进行裁剪,留下最基本的硬件驱动程序,以提高Linux内核的运行效率,对安卓内核的配置方法如下.

从Ubuntu系统终端中进入到安卓内核源码的根目录,并运行make menuconfig后,运行安卓系统的内核配置主菜单(见图3).通过System Type选项,选择S3C6410目标板为平台.

根据需要,选择相应的选项,对Linux内核进行裁剪.观察每个选项,可以发现安卓系统的Linux内核对多种外设都进行了支持,比如键盘、USB接口,电源管理,ADC驱动等,系统将对这些外设的支持裁减掉,以简化Linux内核运行机制,提高内核处理效率.Linux裁剪之后,生成新的zImage内核镜像文件,可以发现,裁剪后的内核比未裁剪的内核小很多,节省了芯片Ram的存储空间,提高了芯片的运行效率.

图3安卓系统内核配置主菜单

2.2制作安卓的文件系统

安卓系统十分庞大,编译一次的时间很长,为了方便使用,需要使用3个脚本分别编译和创建安卓系统,分别是build-android、genrootfs-s.sh和genrootfs.sh.首先通过build-android工具编译安卓系统,然后通过genrootfs工具提取安卓系统的文件系统,文件系统会生成在rootfs_dir目录中,通过mkext3image工具将提取出来的安卓文件系统制作成EXT3格式的映像文件,好处是此映像文件可以直接在SD卡中运行,不必烧写到Nand Flash中,节省了Nand Flash空间.至此,安卓移植工作需要的3个核心文件都已经创建完成,用相应指令将3个核心文件安装到硬件平台上,就可以运行安卓系统了.

3WIFI模块的设计与实现

安卓系统的Linux内核驱动程序中,对WIFI模块进行了标准的实现,在内核接口上,与普通的有线网卡驱动区别不大,在驱动之上是WIFI的连接程序,负责直接操作WIFI驱动[3].安卓的应用层通过硬件抽象层接口完成对WIFI连接程序的操作,硬件抽象层接口抽象出一套统一的接口以供WIFI服务使用,该服务维护WIFI的状态,并对WIFI发出各种操作指令.用户通过UI层操作WIFI服务,实现对WIFI硬件的控制.

这种标准的实现虽然能够提供WIFI的功能,但是也还有需要改进的地方.比如对IP设置比较繁琐,电源管理模块不够完善等.系统抛弃部分标准的实现,对WIFI模块重新设计,提高WIFI模块的性能.

图4是系统WIFI模块设计的整体架构,包括对设备驱动程序的编写,中间层的实现和应用层的设计.中间层包括对硬件抽象层的实现和利用系统库选择合适的WIFI连接程序,打通硬件和软件连接的桥梁.

3.1设备驱动层设计

WIFI模块与CPU的通信必须借助于某种总线,因此WIFI模块的驱动是由WIFI硬件部分和通信部分组成的[4].系统采用Marvell公司推出的88w8688系列WIFI模块,Marvell公司提供了这款WIFI模块的Linux版驱动,但是其SPI总线的驱动不是基于S3C6410平台的,需要自己编写SPI的驱动程序.系统将驱动划分为I/O通信层和WIFI功能层,通过SPI总线传输的数据由I/O功能层实现,WIFI功能层用于控制WIFI的硬件,二者通过一套函数接口完成交互.这样做的好处是最大限度的实现了代码的可重用性,简化了开发流程.图5为WIFI驱动的整体架构图.

CPU通过SPI控制器与I/O通信层和WIFI功能层进行数据通信,通信的方式采用DMA数据传输方式,通过I/O通信层提供的接口函数register_user(),gspi_register_irq ()完成WIFI设备的初始化,WIFI模块通过register_user()向SPI总线注册设备,通过wlan_add_card()初始化和注册网络设备,完成WIFI模块在系统中的注册,使WIFI驱动在内核中运行起来.

3.2中间层的实现

图4WIFI子系统整体架构

图5WIFI驱动整体架构

中间层是安卓系统的系统库函数部分,这一层包括系统C库、字体库、图形库,以及应用软件运行所必需的Dalvik虚拟机[5].中间层的作用是为系统的应用程序提供运行时的支持,为应用程序操作驱动程序提供接口函数,提供WIFI连接时的认证程序.图6为WIFI模块的中间层整体框架.

安卓系统已经提供了对网络接口的配置,只需要完成硬件抽象层的编写,并调用WIFI连接程序,完成中间层的编写.WIFI子系统硬件抽象层包括WIFI连接程序的抽象,应用程序通过硬件抽象层调用WIFI连接程序,完成与硬件的交互.系统采用的WIFI连接程序是第三方程序Wpa_supplicant,好处是简化了开发流程,提高了程序的可靠性.修改安卓的启动脚本,使系统在启动后自动加载WIFI模块.

3.3应用层设计

应用层处于中间层之上,基本由JAVA语言编写,包括安卓系统的图形系统,并且为应用程序提供各种系统服务[6].在WIFI应用层,与用户直接交互的有4个类:WirelessSettings负责系统所有无线设备的设置;WifiSettings负责打开和关闭WIFI;AdvancedSettings负责选择WIFI休眠策略;AccessPointDialog用于设置AP的密码.在这4个UI类之下,是WIFI的服务类,负责WIFI与系统的事务性操作,主要包括:WifiService负责为需要使用WIFI的进程提供服务;WifiManager用于管理WIFI数据与WifiService的连接;WifiStateTracker和WifiMonitor负责监视WIFI的状态变化;WifiNative是一系列JNI调用接口,是应用层与中间层的纽带.对WIFI应用层的程序编写,就是完成这些主要类的编写工作,图7为WIFI应用层的整体框架.

在应用层上,系统改进了应用程序框架中提供的WIFI服务,增加了针对AP网路设置静态IP的功能.在安卓系统中,IP设置由一个系统程序完成,需要修改属于安卓系统的Settings类的程序,完成在安卓的WIFI服务中设置静态IP的功能.首先建立名为APSettingActivity的活动,通过Preference类设计活动的用户界面,添加静态IP设置的按钮,并为每个Preference类注册名为onPreferenceChangeListener()的方法,在每个Listener()方法中设置用户点击界面按钮时改变的系统默认值,通过安卓系统自带的SQLite轻量级数据库存储用户的设置,将新的IP设置通过intent以广播的形式传送给APSettingActivity()活动,然后调用updateUI()方法刷新系统界面,完成在WIFI模块程序中添加静态IP功能.

图6WIFI中间层整体框架

图7WIFI应用层整体框架

图8WIFI省电模式设置

系统对WIFI模块的电源管理也进行了优化,在安卓系统中,针对WIFI的电源管理有3个选项,分别是永不休眠,屏幕关闭时休眠和充电时不休眠.这3种方式有些简单,有些时候不能起到很好的省电的作用.出于这些考虑,本系统在原有休眠方式的基础上添加了两种更加省电的休眠方式:一种是判断无数据传送时休眠,一种是电量过低时提示用户关闭WIFI模块.WIFI省电模式界面见图8,第一种休眠方式是通过检测WIFI模块的数据流量大小来判断是否休眠,当数据流量足够小时,系统会认为用户在这段时间不需要使用WIFI模块,从而启动WIFI休眠模式,达到省电的目的.具体实施方法是在系统的休眠策略对话框中,添加“当无数据传输x秒后休眠”的选项,通过ListPrefernece类弹出对话框让用户设置超时时间,然后通过onPreferenceChange()方法将其写入属性系统,系统通过读取网络接口的数据包计数情况来判断WIFI是否处于闲置状态,一旦系统判断WIFI处于闲置状态,就通过广播的形式通知WIFI模块进入休眠状态,达到省电的目的.第二种方法和第一种方法的实现方法相同,只是将判断条件改为“电量过低时关闭WIFI”,在此不再赘述.

4系统测试与分析

将原生安卓系统和优化后的安卓系统连接到网络中,每3 h分别记录剩余电量,并保证两个系统做相同操作的条件下,连续正常使用系统24 h后,分别记录系统的耗电情况.经过WIFI优化后的安卓系统,在24 h的测试后,剩余电量为20%,而原生安卓系统的剩余电量为10%(见表1).经对比,发现优化后的安卓系统大大延长了系统的使用时间.

优化后的安卓系统能够稳定连接WIFI信号并且降低了智能设备在无线网络下的功耗,提高了智能设备的续航能力,具有一定的实际应用价值(见表1).

测试时间3 h 6 h 9 h 1 2 h 1 5 h 1 8 h 2 1 h 2 4 h原生安卓系统剩余电量9 1 % 8 2 % 7 5 % 5 9 % 4 6 % 3 3 % 2 1 % 1 0 %优化后的安卓系统剩余电量9 5 % 9 0 % 8 0 % 6 8 % 5 6 % 4 3 % 3 2 % 2 0 %

[1]仲元昌,王靖欣,胡江坤,等.Android内核移植及在远程监控中的应用[J].重庆理工大学学报(自然科学版),2011,25(1):102-106.

[2]张烨.基于Android平台WIFI的实现及应用[D].北京:北京邮电大学,2012.

[3]裴超.基于Android平台Wi-Fi模块的设计与实现[D].武汉:华中科技大学,2011.

[4]王柯,马宏斌,王一圣.基于Android平台的软件开发若干关键技术研究[J].测绘与空间地理信息,2014(9):14-16.

[5]Teng K H,Lam Z Y,Wong S K.Dimmable WiFi-connected LED driver with android based remote control[C]//2013 IEEE Symposium on Wireless Technology&Applications(ISWTA),IEEE,2013:306-309.

[6]Zahid I,Ali M A,Nassr R.Android smartphone:Battery saving service[C]//2011 International Conference on Research and Innovation in Information Systems,IEEE,2011:1-4.

The Implementation and Application of WIFI Module Based on Android System

LI Ning
(Cloud Computing and Information College,Anhui Finance and Trade Vocational College,Hefei 230601,Anhui,China)

In this paper,by translating Android system,it redesigned and optimized the WIFI module based on Android system,improved the battery life of the Android system,and strengthened the support of android system of WIFI module.The test shows that this system runs stably with a strong practicability.

Android system;WIFI;the transplantation of Android;WIFI-drived

TP273.5;TP274%

A%%%

1007-5348(2017)03-0034-05

(责任编辑:欧恺)

2016-12-05

李宁(1981-),女,天津人,安徽财贸职业学院云桂信息学院讲师,硕士研究生;研究方向:计算机应用技术,软件开发与应用.

猜你喜欢
中间层应用层驱动程序
一种十七股子午胎钢丝帘线
计算机硬件设备驱动程序分析
基于分级保护的OA系统应用层访问控制研究
新一代双向互动电力线通信技术的应用层协议研究
镍基高温合金TLP扩散焊中间层材料研究进展
B含量对IC10合金TLP焊接用中间层材料及接头组织的影响
物联网技术在信息机房制冷系统中的应用
基于MPC8280的CPU单元与内部总线驱动程序设计
Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair
栅格中间层数据在数字地形分析中的应用