移动终端开源操作系统基于软件包的在线自动更新方法

文档序号:6341247阅读:300来源:国知局
专利名称:移动终端开源操作系统基于软件包的在线自动更新方法
技术领域
本发明涉及移动通信领域,特别涉及一种移动终端开源操作系统的自动在线更新 方法。
背景技术
在中国,互联网和移动设备的发展相互影响,形成强大的普及浪潮。以智能手机、 上网本为代表的移动终端在激烈的竞争中迅猛发展。根据CNNIC第沈次互联网调查报告 称,截止2010年6月全国有2. 77亿手机上网用户,占网民总体的近66.0%。随着手机网民 的增长,出现了逐渐增大的只使用手机上网的群体,这一群体在2010年中已经占到网民整 体的11. 7%。以安卓(Android)系统为代表的移动终端开源操作系统的使用比例和影响能力 在不断扩大。该系统一开始就是用开源、开放的开发方式,受到业界和学术界的广泛关注, 自从发布以来,Android的版本基本上每半年一个台阶地向前发展。其平台的开放性也吸引 了大量的第三方开发者进行应用程序开发,BlackDuck报告显示2009年新增开源项目903 个,而面向Android的项目就有2 个,占25%之多,相比之下,iPhone和Windows Mobile 于2009年分别创建76和75个开源项目。Gartner公司2010年中的咨询报告中预测, Android系统将在2010年度成为仅次于Nokia Symbian系统的全球第二大移动终端操作系 统,并将于2014年跃居全球第一。在这种情况下,操作系统的升级、维护管理成为重要问题。随着现代软件的发展, 人们渐渐意识到,软件是服务,而不仅仅是一个产品。软件系统需要一个持续更新的机制。现代软件非常复杂,任何系统或多或少都会 存在缺陷,而操作系统作为最重要最复杂的一环,问题尤为突出。互联网的发展对网络的安 全性产生了正反两方面的影响一方面,用户受到攻击的可能性加大;另一方面,用户也更 容易获得系统更新副本。软件系统应该为用户提供持续的可更新的服务,以使每一个用户都能感受到软件 更新带来的好处。现代软件体现出的是一种服务而不仅仅是一个产品,开发者不断地为软 件系统增强功能和提升性能。如果最终用户无法体验这种进步,用户可能会转而选择其他 的产品。这就是为什么与传统软件相比,及时更新的网站、Web服务显得更有吸引力的原因之一。移动终端开源操作系统的系统更新非常有必要·安全更新没有安全更新,软件漏洞很容易让移动终端设备病毒泛滥。·软件错误恼人的软件错误能很快地修复和发布到用户的手机当中。 功能更新开源移动终端操作系统是一个快速进步的系统,每个用户都希望能安 装上新的发布版本,系统更新机制为此提供了基本支持。 性能更新开源移动终端操作系统是开放的平台,系统性能、功耗将会快速改进, 有了这些更新机制,就可以方便地体验到别人的研究成果。
在包管理系统出现以前,软件系统的更新往往意味着系统管理员以其他方式下载 补丁并重新编译源代码,覆盖原有软件。开源的Linux操作系统具有良好的包管理机制。很多Linux发行版都包含一个专 门的包管理器,Linux的包管理器起源于Debian和Slackware出现的时代,这两个系统都 属于仍在更新的最古老的Linux发行版。Debian包管理系统有几层,底层为dpkg,dpkg的 前端可以是dselect、apt等各种软件,它们的出现极大地丰富了 dpkg的功能。最近非常流 行的W3UntU基于Debian,也使用dpkg/apt,其他发行版如RedHat,OpenSUSE等也都各有自 己的一套包管理系统,分别叫做rpm/yum和yust。但与Linux发行版的众多包管理系统相比,Windows的机制有所不同。Windows 控制面板中的软件包管理提供已安装软件的卸载入口,它和WindowsUpdate —起能为系统 提供很好的可更新的服务。首先它仅仅关注Windows操作系统或者是其他微软产品如IE、 Microsoft的更新;其次WindowsUpdate并没有包的概念,它从微软网站上获取最新的系统 补丁列表,并逐个安装。部分应用软件也提供了可更新的机制,如Eclipse、Firefox等。但这种更新往往 是插件式的,与包管理系统也有很大差别,例如Firefox的附加组件网站上提供了大量的 免费扩展。这种更新的好处是跨操作系统(或者说跨包管理系统),对Windows等的无包管 理器系统的也是一种功能的补充。本发明中软件包管理系统的定义为类似Linux包管理系统,主要负责管理操作 系统层面的软件包。软件更新仅仅是包管理系统的功能之一,除此之外,软件包管理系统的 其他主要功能有·管理系统中每一个软件包的安装、卸载生命周期。·管理系统中软件包的依赖关系,根据依赖关系自动安装和卸载软件包。·管理软件包的冲突,并向用户报告。·同步软件包源的最新状态,并建议用户更新。·管理软件包,保证来源可靠、下载和安装完整,并在出现错误时回滚。·为用户提供方便索引、可搜索的软件列表。安卓等移动终端开源操作系统目前只支持应用层的软件包管理方面,并不能满足 操作系统层面的软件更新需求。用户能够通过互联网访问AndroidMarket下载软件包, 下载到的软件包为apk格式,由Andrο i d系统中自带的Andro i dPackageManager负责安 装和卸载。然而Android系统分成4个层次,Linux内核、C/C++库、应用框架、应用层, AndroidPackageManager只能管理位于应用层的软件,并不能更新其他三个层次(统称为 系统层)的软件。通常情况下Android设备的其他层次只能通过下载系统镜像、刷写Flash 的方式更新。本发明给出移动终端开源操作系统基于软件包的在线自动更新方法,服务器端完 成系统层面的软件自动打包处理,实现客户端的自动更新,可以很好地解决上述问题。使得 用户能通过简单的确认操作,就能进行系统更新。具有重要的实际意义和应用价值。

发明内容
本发明利用程序分析技术,设计出一种移动终端开源操作系统基于软件包的在线自动更新方法,方法针对目前广泛采用的开放源代码移动终端操作系统中的系统层软件 (以Android系统为例,则对应于Linux内核、C/C++库、应用框架)更新问题,要求处理的 目标操作系统满足以下条件(1)可以自由获取全部源程序代码;(2)系统采用非递归方式 进行编译,即所有系统层软件采用单个编译控制文件Makefile、或使用包含机制连接在一 起的多个编译控制文件。本发明包含为服务器端和客户端两个部分,均采用软件实现,称为服务器端软件 和客户端软件,参看附图1下半部分的方框。前者运行于服务器端,完成开源操作系统源代 码获取、自动分包、自动产生更新信息和自动发布软件包等步骤;后者运行于移动终端,完 成更新信息自动检查、软件包自动下载和安装等步骤。所述方法采取以下步骤进行步骤(101),服务器端自动获取开源操作系统源代码。服务器端软件采用定时的方 式自动连接开放源代码操作系统代码发布站点,通过版本管理软件下载最新的源代码,所 得到的源代码中包括C/C++/JAVA源代码文件和头文件、以及编译控制文件Makefile,同时 从版本管理系统中得到源代码的版本更新信息;步骤(102),服务器端进行源代码自动分析,分包、记录更新。本方法对开源操作系 统中的编译控制文件进行分析,以编译构建模块为单位进行自动分包,分析并自动建立包 之间的依赖关系,以此为依据进行软件包自动划分、更新信息管理,具体方法如下1)软件包的定义。本方法中将每一个编译控制文件中的软件模块定义为一个软件 包。所有该模块对应目标名称所依赖的文件均属于这个软件包。编译控制文件信息主要包 含规则和模块信息规则。每条规则由三部分组成构建目标、目标依赖的前提条件、生成目标所需命 令。其中目标和前提条件都是文件,因此规则中实际上定义了文件之间的依赖关系,也决定 文件的构建次序,此外,构建系统可以根据文件的最近修改时间决定是否重新构建一个文 件,如果一个目标比它的所有依赖都新,那么就没有必要重新构建该文件。模块。模块是对构建目标而言的,开源操作系统编译控制文件将模块定义为构建 目标,而每个目标都对应着规则。对于每个模块一般而言会生成一个最终文件,该最终文件 为以下类型之一 c/c++相关的静态库文件、可执行文件、共享库文件,Java相关的静态类 库文件、类库文件、可执行应用程序包。2)读取编译管理数据库信息。服务器端运行编译管理程序(make),将所生成的内 容为编译管理数据库,将该数据库记录到文本文件(称为数据库转贮信息文件)中,该数据 库格式包括·开头部分为GNUMake的版本信息,·随后为Make命令的输出,使用“_n”选项,此部分为空。□接着一行 ‘#Makedatabase,printedon$DATE,表示 Make 数据库的开始,随后是 数据库的部分,每一类数据以一行注释开始,若该行注释为□ ^Variables'变量。包括所有全局变量以及宏函数定义。□ ‘#Pattern_speci □ cVariableValues,忽略,我们不关心。□ ^Directories'忽略,我们不关心。□ ^ImplicitRules'定义源语言文件到目标文件的构建规则。
□ iSFiles'文件依赖关系。包括对每一个文件的生成规则,其后用注释给出了 所有局部变量的定义,包括通过规则定义的变量,和一些编译管理工具内置的变量如“$@”、 “$*”等,最后给出构建目标所执行的命令。该数据库我们主要关心三部分内容变量、规则和文件依赖关系。3)规则数据解析。首先去除编译数据库转贮信息文件中非目标规则等冗余信息, 所谓非目标规则指的是该规则的目标文件从未成为某一规则的目标。在数据库转贮信息 文件中搜索"Variables"、‘‘ Files"关键字,包含Variables的信息构成变量表,包含 Files的信息构成规则表。其中变量表定义为(名称,数值),其中名称有两种含义一种是全局变量名,此时 对应的“数值”表示该变量的值,根据编译控制文件的规则,全局变量中包含了模块名称;另 外一种是宏函数定义,此时对应的“数值”表示该函数的定义。规则表定义为一个二元组(构建目标、目标依赖的前提条件),即编译构建文件中 规则中的前两个部分,其中构建目标中包括最终安装运行与移动设备的“安装文件”和安装 “路径”,以及为生成该安装文件而产生的中间文件,目标依赖的前提条件中包含生成该安 装文件所依赖的源文件和库文件。4)模块划分。从幻中构造的变量表中提取模块名称,对所有运行于移动设备的模 块,根据编译过程中分别属于静态库、共享库等特征标记为不同的模块类型,用一个二元组 <模块,模块类型 > 表示。从规则表中查找各模块中所包含的安装文件和路径信息,以四元 组形式 < 模块,模块类型,路径,安装文件 > 建立为模块表,每一个模块将对应成为目标机系 统中的一个软件包。为所有模块建立模块表,则软件包自动划分完成。5)提取文件和包依赖关系。文件依赖关系从数据库中的规则表中提取生成,依次 从规则表中提取每一行规则,对于规则中每个“目标所依赖的前提条件”,记录一个二元组 条目 < 目标,依赖〉,构成文件依赖关系。模块表定义了模块和安装文件的包含关系二元组 <模块,安装文件 >。利用这两种关系,即可提取所有的模块依赖关系。6)软件包更新信息判定。步骤(101)中从操作系统源代码版本管理系统中得到 了所有源文件的版本更新信息,如果某个软件包中所包含的任意一个源文件发生变化,则 将该更新信息设置为“需要更新”,所有编译时依赖于该软件包的其它软件包也全部设置为 “需要更新”;如果某个软件包中所有源代码文件都没有发生变化,而且所有编译时该软件包所 依赖的其它所有软件包没有发生变化,则将更新信息设置为“不需要更新”。扫描所有软件源代码,记录软件包更新情况信息。步骤(10 发布软件包和更新信息。将步骤(10 中得到的软件包和更新信息 复制到服务器特定位置,供客户端访问,提供自动在线更新服务;步骤(104)移动终端检查更新信息并自动更新。移动终端安装某一个特定版本 的开源操作系统软件,安装用于自动更新的客户端包管理器软件,该软件维护一个当前所 有已安装软件版本信息文件。在具备网络连接的情况下,包管理器软件定时自动连接更新 服务器,自动下载所安装软件包的更新信息,和当前安装软件版本信息进行对比,如果发现 某个软件包服务器端软件的版本高于当前安装版本,即可判定该软件包待更新,通知用户, 经过在用户授权之后,自动下载并安装需要更新的软件包,其他不需要更新的软件包保持不变;如果发现没有新的可用软件包,则不进行任何更新操作。根据本发明的基于软件包的在线自动更新方法能够对目前流行的移动终端开源 操作系统进行进行自动在线更新,达到系统软件的快速自动升级部署,解决用户的需要的 操作系统的升级、维护管理问题。该在线自动更新方法可与常规的应用软件包管理方案结合,可应用于手机、上网 本等使用开源操作系统的移动终端软件管理,为这类设备的系统软件分发、部署和认证提 供方便的手段和渠道。该自动更新方法具有易于大规模部署、自动化程度高、易于使用等优 点ο


图1示出本发明方法中服务器端和移动终端之间的交互关系图;图2示出根据本发明进行开源操作系统自动在线更新的流程示意图;图3示出本发明中开源操作系统自动在线客户端包管理流程示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图,以开源操作系统 安卓Android-X86donut版本作为实例对本发明的实施方式作进一步地详细描述。图1示出本发明方法中服务器端和移动终端之间的交互关系图。云端部分是开源 操作系统源代码服务器,为本发明之外的网络资源,本实例中为www. android-x86. org。服 务器端和客户端是本发明所包含内容,其中服务器端的包管理服务器由三个部分组成,客 户端则有一个软件包管理器组成。升级之前的基础系统准备。服务器端按照图2的步骤,从源代码服务器下载2009 年11月M日的donut软件版本作为升级之前的Android-X86基准版本A',执行步骤101、 102、103,完成软件发布。客户端采用基于X86处理器的上网本作为硬件环境,安装2009年 11月24日的donut软件编译生成的镜像文件,同时安装客户端包管理器软件。图2示出了根据本发明进行开源操作系统自动在线更新的流程图。经过一段时间 的开发,安卓donut进行了部分软件修改,到2010年3月18日的时候,源代码升级为版本 B,总共有四个软件模块进行了升级,内容如下

权利要求
1.一种移动终端开源操作系统基于软件包的在线自动更新方法,其特征在于,所述方 法是针对目前广泛采用的移动终端开放源代码操作系统,简称开源操作系统,系统层软件 更新问题,分为服务器端软件和客户端软件两个部分,前者运行于服务器端,后者运行于移 动终端,在网络环境下,所述方法进行步骤如下步骤101 服务器端软件采用定时方式自动连接开放源代码操作系统代码发布站点, 通过版本管理软件下载最新的源代码,所得到的源代码中包括C/C++/JAVA源代码文件和 头文件、以及编译控制文件Makefile,同时从版本管理系统中得到源代码版本更新信息,并 将上述文件存放到服务器端;步骤102 服务器端自动对开源操作系统中的编译控制文件进行分析,以编译构建模 块为单位进行自动分包,分析并自动建立包之间的依赖关系,记录不同软件包的更新时间、 编译方案,分析并记录不同软件包之间的编译时依赖关系,通过依赖关系和更新时间分析 软件包是否需要更新,扫描所有软件源代码,同时记录软件包划分和更新情况信息,进行从 源代码到可执行代码的编译工作,依据上述信息将可执行和目标文件整理为相互独立的软 件包,并填写更新信息;步骤103 将步骤102中得到的软件包和更新信息复制到服务器特定位置,供客户端访 问,提供自动在线更新服务;步骤104 移动终端连接网络,使用客户端包管理器软件自动连接更新服务器,检查所 安装软件包的更新信息,在用户授权的情况下自动下载并安装待更新的软件包,其他不需 要更新的软件包保持不变。
2.根据权利要求1所述的移动终端开源操作系统基于软件包的在线自动更新方法,其 中服务器端将自动对开源操作系统中的编译控制文件进行分析、分包、记录更新信息的步 骤102还包括以下步骤步骤1 将每一个编译控制文件中的软件模块定义为一个软件包,所有该模块对应目 标名称所依赖的文件均属于这个软件包,编译控制文件信息主要包含规则和模块信息其中每条规则由三部分组成构建目标、目标依赖的前提条件、生成目标所需命令,其 中目标和前提条件都是文件,因此规则中实际上定义了文件之间的依赖关系,也决定文件 的构建次序,此外,构建系统可以根据文件的最近修改时间决定是否重新构建一个文件,如 果一个目标比它的所有依赖都新,那么就没有必要重新构建该文件;其中模块相对于构建目标而言,开源操作系统编译控制文件将模块定义为构建目标, 而每个目标都对应着规则,对于每个模块会生成一个最终文件,该最终文件为以下类型之 一 C/C++相关的静态库文件、可执行文件、共享库文件,Java相关的静态类库文件、类库文 件、可执行应用程序包;步骤2 服务器端运行编译管理程序make,将所生成的内容为编译管理数据库,将该数 据库记录以文本形式存储到数据库转贮信息文件中,该数据库我们主要关心三部分内容: 变量Variables、规则Rules和文件Files依赖关系;步骤3 服务器端分析过程中首先去除编译数据库转贮信息文件中非目标规则等冗余 信息,所谓非目标规则指的是该规则的目标文件从未成为某一规则的目标;在数据库转贮 信息文件中搜索〃 Variables"、“ Files"关键字,包含Variables的信息构成变量表, 包含Files的信息构成规则表;其中变量表定义为〈名称,数值〉,其中名称有两种含义一种是全局变量名,此时对应 的“数值”表示该变量的值,根据编译控制文件的规则,全局变量中包含了模块名称;另外一 种是宏函数定义,此时对应的“数值”表示该函数的定义;规则表定义为一个二元组 < 构建目标、目标依赖的前提条件 >,即编译构建文件中规则 中的前两个部分,其中构建目标中包括最终安装运行与移动设备的“安装文件”和安装“路 径”,以及为生成该安装文件而产生的中间文件,目标依赖的前提条件中包含生成该安装文 件所依赖的源文件和库文件;步骤4 从步骤3中所构造变量表中提取模块名称,对所有运行于移动设备的模块,根 据编译过程中分别属于静态库、共享库等特征标记为不同的模块类型,用一个二元组〈模 块,模块类型〉表示。从规则表中查找各模块中所包含的安装文件和路径信息,以四元组形 式 < 模块,模块类型,路径,安装文件 > 建立为模块表,每一个模块将对应成为目标机系统中 的一个软件包,为所有模块建立模块表,则软件包自动划分完成;步骤5 文件依赖关系从数据库中的规则表中提取生成,依次从规则表中提取每一行 规则,对于规则中每个“目标所依赖的前提条件”,记录一个二元组条目 < 目标,依赖〉,构成 文件依赖关系。模块表定义了模块和安装文件的包含关系二元组〈模块,安装文件〉,这两 种关系即构成所有的模块依赖关系;步骤5 服务器端记录操作系统源代码的模块名称,记录不同软件包的更新时间、编译 方案,分析并记录不同软件包之间的编译时依赖关系,通过依赖关系和更新时间分析软件 包是否需要更新,具体判定分为以下两种情况情况1 如果该软件包的源代码和以前版本相比发生变化,将更新信息设置为“需要更 新”,所有编译时依赖于该软件包的其它软件包也全部设置为“需要更新”;情况2 如果该软件包未发生变化,而且所有该软件包编译时所依赖的其它软件包均 没有发生变化,则将更新信息设置为“不需要更新”;扫描所有软件源代码,同时记录软件包划分和更新情况信息,进行从源代码到可执行 代码的编译工作,依据上述信息将可执行和目标文件整理为相互独立的软件包,并填写更 新fe息。
全文摘要
一种移动终端开源操作系统基于软件包的在线自动更新方法,涉及移动终端软件领域,所述方法适用于移动终端开源操作系统,可以实现系统软件以包为单位的远程自动更新,方便操作系统安全漏洞的修复安装。方法包括两个方面服务器端自动完成软件包构造和发布,负责从开源站点获取操作系统所有源代码、自动划分并构造合适的软件包、根据源代码的版本信息和依赖关系确定软件包的更新信息、利用网络方式发布软件包;移动终端是软件包的获取和使用方,通过客户端软件自动检查更新信息,并以软件包为单位下载并更新系统,达到自动在线更新的目的。本发明具有易于大规模部署、自动化程度高、易于使用等特点。
文档编号G06F9/445GK102118500SQ201010621838
公开日2011年7月6日 申请日期2010年12月27日 优先权日2010年12月27日
发明者张伟达, 王生原, 董渊 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1