VxWorks操作系统特点及热补丁制作过程中相关技术
2017-07-14丁建成
丁建成
摘要:在正常的软件开发过程中,当一款软件产品完成开发并交付客户,并不等于此项工程就完结了,负责软件开发的人员还需要处理自己公司开发出的软件在使用上存在的缺陷和问题。基于VxWorks操作系统开发出来的软件,是支持热补丁技术的,这种技术能在不影响系统运行的基础上自行完成软件的修复。所以,想要在不重启系统的情况下很好地处理解决软件在使用时暴露出的各种问题,就必须要对热补丁的技术进行深入的分析和研究。因此,以此为基础,结合一些工作中的实际情况,对VxWorks操作系统的特性及热补丁系统及其制作过程中涉及的相关技术进行了分析研究。
关键词:VxWorks操作系统;特性;热补丁;制作;技术
VxWorks系统是一种实时嵌入式的操作系统,它能够给研发人员提供一些实时高效的中断管理、通信、任务调度等功能。VxWorks是经过了深入的实验和验证的,现已广泛地运用在航空、航天、医疗、通信等多个关键的行业和领域。
一款软件产品完成开发并交付客户,并不等于此项工程就完结了,负责软件开发的人员还需要处理自己公司开发出的软件在使用上存在的缺陷和问题。对于用VxWorks操作系统开发出来的软件,可以使用热补丁技术在不影响系统运行的基础上自行完成软件的修复,这样能有效提高软件的可靠度和安全性,让软件的使用寿命进一步延长,同时也能让软件维护工作的质量再提升,有效地减小软件的开发成本。
1VxWorks系统的特点
1.1任务管理
VxWorks的任务就是操作系统中代码运行的一个映像,VxWorks操作系统的模块要进行运行,通常都是用任务的方式对其进行调度,让其运行;当然,要想动态启动或者停止某一项指定的具体任务时,就可以考虑采用操作系统提供的对应的功能函数。
1.2符号表管理
VxWorks系统在软件的编译过程中,有一个汇总符号表的功能,它能将所有的外部和全局变量名和函数名编译到一个全局符号表之中。在启动软件系统以后,通过调用操作系统中提供的查询符号地址的API函数,用函数名或者变量名等索引到对应符号的地址,这样就提供了动态修改函数的技术基础。
1.3模块动态加载
这款操作系统能把模块软件编译成ELF格式的可以执行文件,在加载此文件时可以不需要停止系统的运行。
上面提到的三种功能是VxWorks系统所特有的,有了这三种功能的支持,就可以用热补丁的方法来修补存在于软件模块中的各种问题和缺陷。鉴于后面所做的最新版本的热补丁是重新实现旧版本下的功能,并对其原有的缺陷和错误进行了修改,也就是VxWorks操作系统中运行的软件产品所制作热补丁的继承性质,所以,在制作热补丁时必须要特别注意不要遗漏原有的功能。
2热补丁包制作流程图
在制作热补丁时,如果使用的是持续集成的技术,就能以更高的效率和更好的质量来完成热补丁包的制作。本篇文章所使用的软件配置管理工具是ClearCase以及持续集成引擎Jenkins来制作热补丁包。制作流程如下图:
3热补丁代码的编写和静态检查
3.1热补丁代码编写
在对热补丁进行制作之前,需要软件开发工程师通过产品的配置管理工程师对热补丁的软件代码基线进行反复确认,还要对目前加载在软件基线上的热补丁包的版本进行确认。开发设计人员需要从版本库里下载需要用到的软件基线代码和补丁包的代码文件,从而进行新版本热补丁代码的编写。在补丁的开发编写上,要明确定位存在问题及缺陷的函数,然后才能修补或改进相关的函数源代码,从而对功能代码进行修改。
对于普通的软件和补丁软件的开发,还是有一定的区别;所以,软件开发工程师在进行软件开发时,以下的方面是需要注意的地方:
第一,对于补丁在开发时涉及的代码方面的问题和缺陷,需要定位到产生问题和缺陷的函数源代码后再进行修改,在对对应的功能代码进行修改时,切忌对*h文件中的内容进行修改。
第二,在处理有缺陷的源代码时,要对需要修改的函数进行保留,可以直接将无关的函数删除或注销。因为最终我们将通过工具提取热补丁这部分的目标代码,其它部分是不被包含到补丁里的。
第三,若是要修改*c文件,必须要插入一个能返回补丁版本号的函数,它所对应的返回值应该是补丁的版本号。
3.2ClearCase版本库的代码更新
持续集成工具Jenkins需要在版本库锁库之后完成源代码更新。Jenkins工具执行代码更新时,需要编写代码更新的批处理脚本code-update.bat,把代码更新的脚本配置在任务中。
3.3代码静态检查
在开发工程师将源代码修改完成之后,还需要使用持续集成工具Jenkins调用静态的代码检查工具Coverity Prevent和PC-Lint对代码进行常规的代码质量检查,以保证热补丁文件中代码的质量。一般来说,最常用于检查C、C++源代码的工具就是PC-Lint,而另一種代码检查工具Coverity Prevent则是检测和解决c、c++、Java和c#等源代码中存在严重问题和缺陷的一种比较先进的自动化检测工具。除此之外,还必须要检查补丁源代码中是否存在strcpy等危险函数来保证热补丁的安全性。若在检测时发现源代码中有任何异常,都要第一时间反馈给开发工程师,通知其对源代码进行修复处理,直到发现的问题被全部解决掉。
4热补丁的制作过程
函数热补丁、模块热补丁、热补丁包是热补丁的三个层级。一般来说,开发制作热补丁是以持续集成的热补丁开发为基础的。
4.1模块热补丁目录结构
在制作热补丁的模块时,要创建一个“产品名一版本号_BASE\VXWORKS\模块名”这样的文件夹,用来存储热补丁文件和其他相关的文件。下面是以UPF模块(User Port Function,用户端口功能)为例做出的文件夹目录结构。
4.2模块热补丁文件制作过程
用UPF模块来举个例子,简述一下制作模块的热补丁文件的流程。
1)将所有涉及的数据、文件集成到Jenkins工具里,编写编译热补丁文件。
在制作的最初,要建立一个:“产品名一版本号Patch—Build”这样组合的构建工程。将编译的任务配置到Jenkins的任务管理的界面上,这样能自动完成编译热补丁源程序代码的任务。在配置时,要按模块进行分类,在任务栏上选取“com-pile”任务。下图是具体的配置表。
*.ini配置文件、Makefile文件、补丁编译脚本和ANT脚本等这些由持续集成工程师编写的,需要按计划开启相应的程序来帮助补丁源代码编译工作。同时,还需要把编译后生成的*.obi文件归纳到UPF.obj的目录下面。
2)制作模块热补丁文件
在完成对模块热补丁文件的编写工作后,还需要及时的制作好模块UPF热补丁文件和补丁中间文件。
首先,要按照。.obj文件的数量,在UPF\obi文件夹中生成从HP0001到HPOOOX的子目录。在制作热补丁的中间文件时,要使用Tornado下的makepatch.exe工具来帮助完成制作,还要通过obj的补丁文件来生成与其对应的符号表信息、热补丁以及制作热补丁文件过程日志等文件,并存放在各自对应的文件夹中。下表是HP0001文件夹为例所要存放的文件。
其次,模块热补丁文件的生成需要依靠热补丁中间文件,所以,要编写并处理好脚本。因为继承性是模块热补丁文件的特有性质,最新的版本肯定会包含上一个版本的所有功能和接口,所以对于不是第一次编译的热补丁文件,就必须要结合旧版本和最新版本的热补丁中间文件来生成最新版的模块热补丁文件。UPF patch.pat是模塊UPF文件的热补丁文件,这要保存到UPF.release文件夹里。
4.3热补丁包打包
在将所有模块的热补丁文件完成制作以后,需要把这些模块的热补丁文件进行打包。因为最新版本的热补丁版本包会将旧版的版本包进行收编,然后再编译形成新的热补丁文件,这也就是热补丁版本包的继承性质。与此同时,还要不断更新热补丁的版本号。
1)创建热补丁包文件夹。
在完成热补丁文件的制作以后,还要创建一个专门存放热补丁包的文件夹,把所有模块的热补丁文件*.pat复制到热补丁包文件夹里边的bin/new目录下。如果有模块的热补丁文件是已经更新过的,那就复制最新版的;如果没有更新过,那就复制原来的模块文件,再把其他相关的文件复制到制定的目录里。
2)热补丁包打包。
通常情况下,要修改打包配置文件autorun.ini,要依次填写本次版本号、基线版本号、源文件目录和目的文件目录等这些信息。运行打包工具packer.exe完成热补丁版本包打包。在对热补丁包完成制作后,要把补丁版本包的文件名称改为:产品名版本号压缩为loadfiles.rar。
5结束语
随着科学技术的飞速发展,嵌入式的系统及其对应的升级软件也暴露出了一些缺陷和问题,而热补丁技术为这些缺陷和问题的修复提供了方法和技术。长时间的工作实践证明,热补丁技术在不影响嵌入式系统正常运行的情况下,能对系统产生的问题和漏洞进行及时有效的修复;在VxWorks系统下的软件使用热补丁技术,能将软件的可靠性和安全性有效的提升,而且还能将软件开发的成本降到最低。本文中提到的使用持续性集成技术来开发热补丁包的想法及所有论证,都能充分的说明此项技术在软件开发效率和软件热补丁质量的提升方面有很强的优势,它不但能将工程师在系统开发时遗留的软件源代码的缺陷和问题进行及时的反馈,还能帮助工程师及时修补源代码的缺陷,更能给项目的管理提供很好的保证。