APP下载

一种Android机顶盒USB自动升级实现

2018-01-08李明春

电子设计工程 2017年16期
关键词:版本号机顶盒校验

毛 强 ,李明春

(1.武汉邮电科学研究院 湖北 武汉 430074;2.烽火通信科技股份有限公司 湖北 武汉 430074)

一种Android机顶盒USB自动升级实现

毛 强1,李明春2

(1.武汉邮电科学研究院 湖北 武汉 430074;2.烽火通信科技股份有限公司 湖北 武汉 430074)

为了提高Android机顶盒的改制在工厂中进行升级的效率问题,提出一种USB自动升级的应用实现。在Android机顶盒系统架构中的应用层开发,详细描述了USB自动升级的流程和具体实现方法,并对Recovery模式下安装升级包进行了梳理。相对工厂利用串口升级的传统方法而言具有节省人力、节省时间和节省花费等优点。通过在工厂进行大量升级成功实例,该升级实现具有很好的稳定性、可靠性和很高的升级成功率。

Android;机顶盒;USB升级;Recovery模式

由于运营商业务需求的更新或者修复系统软件中已有的缺陷,机顶盒系统需要不断地进行升级[1-3]。对生产商而言,一种成熟可靠的升级方案就意味着一种方便、快捷、高效、安全的运营维护保证,并尽可能的延长了机顶盒的生命期,同时可以提升与运营商之间的信任度,降低生产成本,抢占更多的市场份额。

目前,Android机顶盒的升级方式主要有本地升级和网络升级[4-5]。网络升级是将升级包文件放在升级服务器中,一般应用在运营商针对部署在众多用户家里的机顶盒进行大规模远程升级。本地升级的升级包文件在本地,有USB手动升级和串口升级。USB手动升级需要进入机顶盒系统设置相关界面进行手动选择升级选项,来进行USB升级,主要适用于机顶盒研发人员和测试人员。串口升级,利用烧写工具通过串口将版本烧写到机顶盒中。

在机顶盒生产出货前,由于需求业务的突然变更,工厂需要对已烧写进版本的机顶盒进行升级为新的版本,称为机顶盒的改制。目前,在工厂对Android机顶盒的改制大多采用串口升级,操作过程繁琐,花费时间长,耗费人力。因此,使用一种高效、稳定、可靠的升级方法十分必要。本文提出的一种Android机顶盒USB自动升级方法,不需要使用串口和和进入系统设置界面,可以快捷方便地进行升级。

1 Android USB自动升级应用开发

1.1 Android机顶盒系统架构

传统的Linux机顶盒的软件架构主要由驱动层(引导程序和硬件驱动程序)、系统层(包括Loder模块)、中间层(中间件)和应用层组成[6]。从应用程序加载执行来看,Android机顶盒软件系统自下而上也分为4 层[7-8]:

1)Linux内核层

Android系统是基于Linux2.6内核移植的,它主要为机顶盒的硬件提供底层驱动,如Wi-Fi驱动、USB驱动、显示驱动、电源管理等等。

2)系统运行库层

通过C/C++库为机顶盒系统提供一些主要的特性支持。同时还有Android运行时库,主要提供了核心库,可以使用Java语言编写Android应用,以及Dalvik虚拟机。

3)应用框架层

主要提供构建应用程序所用到API(应用编程接口),类似于Linux机顶盒的中间层。

4)应用层

安装在机顶盒中的应用程序属于这一层,包括系统应用程序及第三方应用程序等。

USB升级针对不同的平台可以有不同的方法,主要的实现方法有底层实现和应用层实现两种方法[9]。本文提出的USB自动升级,主要是在应用层进行实现,对于不同机顶盒采用不同的芯片方案,只需要修改相应的适配接口,就可以在Android机顶盒系统中运行,通用性好。

1.2 应用程序原理及框架

Android机顶盒上电,通过USB接口与USB设备进行通信交互[10-11]。当插入USB设备时,会触发一个系统广播,机顶盒的USB升级模块的广播接收器进行相应的处理,启动升级服务,如图1所示。

图1 机顶盒与USB设备交互

USB的升级应用主要在后台进行,较少涉及与用户的交互,主要用到了Broadcast Receiver(广播接收器)、Service(服务)和 Content Provide。应用程序是基于Java语言开发实现,主要由FHUSBReceiver.java、USBUpgradeService.java、UpgradeRes.java 和 Oper ParametersFromSTB.java等组成。

FHUSBReceiver.java主要是对接收到USB设备插拔广播消息的处理,获取USB设备相关信息,通过Intent启动USBUpgradeService.java。USBUpgradeService主要进行升级相关操作,进行校验,拷贝升级文件,进入Recovery模式安装升级包等。UpgradeRes.java是升级资源类,定义了关于升级机顶盒的硬件型号、软件版本号、强制非强制标志等变量信息。OperParametersFromSTB.java主要读取机顶盒数据库系统中的关于芯片的硬件型号、系统软件版本号,获取内存目录等方法。

1.3 USB自动升级流程

1)机顶盒接通电源,处于开机状态;

2)在机顶盒上插上USB设备(例如U盘),会触发一个广播,USB升级模块接收到广播,在广播接收器进行处理,首先会获取到USB设备的挂载路径,然后检测USB设备中的升级包文件是否存在。

3)当检测到升级包文件存在时,就会启动USB升级服务。进行升级校验工作,先会校验升级包硬件版本型号与机顶盒硬件版本号是否一致,这个很重要,不同芯片对应相应型号的升级包,这个由编译环境(硬件对应的编译指令)决定,若不一致不做校验进行强制升级就会导致机顶盒系统崩溃,严重时导致机顶盒硬件损坏。

4)当硬件版本号不一致或软件版本号一致时,升级校验不通过,直接退出升级。当硬件版本号一致,软件版本号不一致时,升级校验通过;软件版本号校验是为了避免软件版本号相同时,机顶盒反复升级。

5)校验通过后,机顶盒先将USB设备中升级包文件拷贝到系统分区下,然后进入Recovery模式。

6)在Recovery模式下安装升级包,若安装失败,就会提示相关信息并退出此模式。

7)升级包安装成功后,机顶盒进行重启,进入正常开机状态。

2 关键技术及具体实现

2.1 关键技术

主要运用到Android开发中四大组件中的Broadcast Receiver、Service 和 Content Provider。

图2 USB自动升级流程图

在Android系统中,广播作为四大组件之一,用于应用程序之间通信,是一种通信手段,可以处理系统级别的事件,其实现需要Intent对象及Broadcast Receiver对象。Broadcast Receiver(广播接收器)是一类组件,可以对系统由Intent发出的广播通过过滤来接收和响应,用来接收系统广播。通常情况下,发出的一个广播Intent是可以被多个注册过此广播的广播接收器用来接收。一般有两种注册广播的方式,在广播接收器类中的代码中注册称为动态注册,另一种在AndroidManifest.xml文件中进行静态注册,通过application中receiver设置的action等来过滤,实现系统广播的监听。本设计中,对于USB设备插入机顶盒USB接口事件的监听,采用静态注册。

Service(服务)可以用来实现程序在后台运行,它适合去做一些不需要与用户交互的操作,同时该任务是长期运行的。当应用程序切换到后台,服务照样运行,不依赖任何用户界面。Service运行在主线程中,不是一个独立的进程。进行Android机顶盒的USB自动升级操作主要在服务运行中进行。

Content Provider是一种共享数据的机制。程序运行在不同的应用程序中,应用程序间的数据和文件之间实现数据共享显得很复杂,Content Provider在Android中实现数据共享相对简单地多[12-13]。它为数据的存储和获取提供了一个统一的接口,数据能在不同的应用程序之间实现共享。在USB自动升级中,主要用来读取文件和读取数据库内容。

2.2 具体实现

FHUSBUpgrade项目在eclipse中结构图如图3。

图3 FHUSBUpgrade项目结构图

主要的目录为:1.assets目录:存放程序打包文件;2.src目录:存放USB自动升级应用的Java源代码;3.res目录:用来存放图片、布局、字符串等资源文件;4.gen目录:自动生成,是与资源对应的资源id;5.lib目录:存放jar包;6.bin目录:编译时自动产生的文件;

7.AndroidManifest整个项目的配置文件;8.Project.properties指定编译所用的SDK版本;

主要方法原理及实现:

1)获取USB设备挂载的路径

Android系统本身在Linux内核层提供了对USB设备的底层驱动,USB设备进行热插拔,内核层会发出 mount或 unmount操作命令给 vold(volume daemon,是一个守护进程,负责扩展存储的挂载),vold再发挂载消息给上层,上层获取挂载的消息及状态后,下发命令给vold,让其执行挂载操作,这时mount目录由vold生成,就位于机顶盒的文件系统目录下,即挂载点。

USB设备插入挂载成功时,会有一个系统广播MEDIA_MOUNTED触发,通过在广播类FHUSBReceiver.java中监听,可以获取它的挂载路径。FHUSBReceiver类继承了BroadcastReceiver类,要覆写 onReceive方法,同时需要在AndroidManifest.xml中进行注册。

当检测到U盘中升级包文件存在时,启动一个intent,以键值对的形式指定升级类型、强制升级类型和USB挂载路径等。当service.putExtra("forceup","0")时,升级类型为非强制升级,可以选择是否升级。

3)USB升级核心程序USBUpgradeService.java

当检测到USB设备中升级包文件存在,就开始启动USBUpgradeService服务。USBUpgradeService继承了Service,实现的功能主要是通过文件读取对升级包文件中相关信息进行读取和读取机顶盒数据库中的信息,从而进行升级校验,然后调用相关方法拷贝安装升级包。

主函数通过public boolean checkHardwareVer(String zippath){}方法进行硬件型号校验,若为机顶盒系统中硬件型号与升级包中的硬件型号不一致,则为false直接退出升级,若为true,接着通过public boolean checkSoftwareVer(String zippath) {}进行软件版本号校验,若两个软件版本号不一致则通过校验,调 用 private void ConfirmUpgrade(String stbVer,String packageVer){}方法,非强制升级时,会弹出一个对话框,显示机顶盒的软件版本号信息,是否需要升级的确认和取消按钮。当选择确认按钮,就用调用private void doUpgradeing() {}方法来升级,在该方法中调用private void CopyUpdateFile(){}将升级包的拷贝到机顶盒系统的cache分区。随后进入Recovery模式。而强制升级,不会弹出对话框,直接调用 private void doUpgradeing() {}方法,随后和非强制升级执行步骤一样。

4)Recovery模式安装升级包

Android机顶盒系统启动后,有3种不同的工作模式:bootloader模式、Recovery模式和正常的启动模式--Main System(主系统)模式。使用升级包update.zip来进行更新时,Android机顶盒通常都会先重启进入Recovery模式,然后通过调用脚本命令启动 Recovery服务来安装升级包[14-15]。

Recovery模式操作的过程:先对启动控制信息块(BCB)的指令进行读取,然后读取cache分区下的指令,将指令重新写入BCB,确保Recovery指令被执行。接着,Recovery要清除BCB的command和recovery相关部分,目的是保证重启后不再进入该模式,而是进入Main System。

将update.zip升级包拷贝到机顶盒系统的cache分区下,cache分区用命令将位置写入到command中,Recovery服务获取了升级包的路径。获取到它的绝对路径path后,Recovery服务要进行的操作是调用 RecoverySystem类 中 的 installPackage(Context context,File packageFile)来安装升级包。同时将 arg=path+filename(升级包名)写入到 BCB中,安装成功后,接着调用 bootCommand(context,arg)脚本命令,最后调用PowerManager类中pm.reboot()方法实现机顶盒重启,随后进入正常启动模式。

3 升级测试

USB自动升级前的准备工作:1)保证机顶盒一直连通电源,防止突然断电导致系统升级中断;2)USB设备中upgrade目录有升级包文件且软件版本号与之前机顶盒中的版本号不同。图4为USB自动升级中的非强制升级,即通过点击升级按钮,进行升级操作。图5为Recovery模式安装升级包的提示操作。在工厂的版本中,目前可以通过在程序中设置标志位zipForceUp(为1时为强制升级)进行相应处理,不用点击升级确认按钮,可以进行下一步的升级操作,节省时间,减少操作。强制升级与非强制升级功能几乎一样[16],强制升级是无法选择的强制升级,非强制升级则可以选择是否升级。

图4 USB自动升级中的非强制升级

图5 Recovery模式下安装升级包

4 结束语

目前在某司的工厂中,进行Android机顶盒改制升级,本文提出的一种USB自动升级实现已经得到应用,其稳定性、可靠性、操作简便性得到了验证。使用该USB升级方式,只需对机顶盒系统的应用层做出相应的功能添加,合入到机顶盒版本中[17],原有机顶盒的功能不需要做出太大的修改,工作量相对小,对于实现工厂Android机顶盒的改制来说具有很大的优势,它具有省时、省钱、节省人力的特点,升级的安全可靠性高,可以显著提高工厂的生产效率。同时,该方法也可应用于研发人员和测试人员进行Android机顶盒的升级。

[1]陈静芳,赖志群.Android在数字机顶盒技术发展介绍[J].电子与电脑,2010(8):33-36.

[2]魏冲,李智浩,于华.浅淡Android系统机顶盒的前景[J].有线电视技术,2012(3):97-99,109.

[3]张晋.浅析数字电视机顶盒升级流程及其注意事项[J].有线电视技术,2015(12):67-69.

[4]朱家发.智能机顶盒的初步研究与实现[D].兰州:兰州大学,2012.

[5]闫茂昌.智能数字电视机顶盒升级系统的设计与实现[D].天津:天津大学,2014.

[6]修晓琴.基于Linux平台的数字电视机顶盒应用升级机制的研究和设计[J].中国有线电视,2015(10):1145-1150.

[7]王东东.基于Hi3716C的Android机顶盒软件设计与实现[D].天津:天津大学,2012.

[8]吴军,彭苏,李婧雯.机顶盒升级技术分析[J].电子技术与软件工程,2016(5):91.

[9]张海泳.基于linux的数字电视机顶盒几种升级方式的设计与实现[J].西部广播电视,2013(6):106-108.

[10]苏维嘉,唐宇,杨静.基于Android平台的USB数据采集系统[J].计算机系统应用,2012(8):39-42.

[11]唐曙,罗武胜,鲁琴,等.基于Android平台的USB通信技术研究[J].计算机测量与控制,2015(12):4121-4123,4127.

[12]吴亚峰,苏亚光.Android应用案例开发大全[M].北京:人民邮电出版社,2011.

[13]韩洪波,倪宏,孙鹏.双模机顶盒在线升级方案设计与实现[J].微计算机信息,2010(24):3-5.

[14]李刚.疯狂Android讲义[M].北京:电子工业出版社,2012.

[15]王晟,苏凯雄.基于Android平台机顶盒在线升级应用的设计[J].有线电视技术,2015(6):47-49,53.

[16]邱进.一种应用于多断口光控真空断路器的同步控制系统的设计与实现[J].供用电,2015(5):69-73.

[17]黄婷,黄伟.基于不同算法求解子问题的Benders分解法在无功规划中的应用[J].陕西电力,2013(3):23-26.

A method of Android set top box USB automatic upgrade implementation

MAO Qiang1,LI Ming-chun2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China;2.Fiberhome Telecommunication Technologies Co..LTD,Wuhan 430074,China)

In order to improve the efficiency of Android set top box's upgrade efficiency in the factory after initialization,this paper presents anapplication of USB automatic upgrade implementation.Developed in the Android set-top box system architecture's application layer,the process of USB automatic upgrade and the specific implementation methods described in detail,sorting to install the upgrade package out in Recovery mode.Compared with the traditional way of using the serial port to upgrade in factory,it has the advantages of saving labor,saving time and cost.Through a large number of successful instances of the upgrade,the USB automatic upgrade achieves good stability,reliability and a high success rate of upgrade.

Android ;set-top box;USB upgrade;Recovery mode

TN87

A

1674-6236(2017)16-0103-05

2016-06-27稿件编号:201606210

毛 强(1990—),男,湖北广水人,硕士研究生。研究方向:通信与信息系统、计算机软件。

猜你喜欢

版本号机顶盒校验
安全使用机顶盒注意五点
认识vSphere安装程序
炉温均匀性校验在铸锻企业的应用
数字电视机顶盒软件自动测试系统的开发及应用
深入浅出 全面获知系统版本号
有线电视高清数字电视机顶盒测试系统的构建
What is Apple Watch All About?
大型电动机高阻抗差动保护稳定校验研究
基于加窗插值FFT的PMU校验方法
锅炉安全阀在线校验不确定度评定