中国科学院软件研究所 李丽颖 李彦峰山东农村信用社联合社 韩广志金陵科技学院 苗丽娟
VxWorks实时操作系统的定制方法
中国科学院软件研究所 李丽颖 李彦峰
山东农村信用社联合社 韩广志
金陵科技学院 苗丽娟
【摘要】VxWorks实时操作系统具有良好的可裁剪性和可扩展性,在Tornado集成开发环境下,开发者可以根据应用程序的需要,选择VxWorks系统的组成。利用Tornado定制VxWorks的方法,简单方便,但具有局限性——不能扩展组件选项、不能修改组件源码、不能细粒度裁剪等。针对以上缺陷,本文系统地提出一种定制VxWorks的方法,包括对VxWorks的扩展、修改、裁剪,操作简便、安全可靠。
【关键词】VxWorks映像编译;组件静态库库编译;cdf文件规则;细粒度裁剪
VxWorks实时操作系统采用精心设计的三层结构——最小内核、基本内核和基本操作系统,以简洁的微内核作为最底层,逐层扩展到完整的VxWorks配置。因此,VxWorks具有良好的可裁剪性和可扩展性,开发者可以根据应用程序的需要选择VxWorks系统的组成。尤其在Tornado集成开发环境下,开发者在界面中的VxWorks选项卡中,exclude不需要的组件,include需要的组件,即可达到定制系统的目的,操作简单方便。
但是,以上定制方法也具有局限性。使用Tornado界面操作时,只能在现有选项的基础上include或exclude组件,不能在界面中添加新的组件选项,用户定制系统的自由性被局限;VxWorks映像生成所需要的组件都是以预先编译好的静态库的形式存在的,修改、裁剪组件对应的源码,并不会对VxWorks映像产生影响;如果通过重新编译静态库的方式实现修改组件源码,需涉及makefile、rules.library、rules.bsp等多个编译文件的使用,难度大、步骤多,且手动编译的静态库稳定性、安全性难以保障;无论是downloadable型工程还是bootable型工程,默认编译选项下生成的文件都过大。
鉴于现有VxWorks实时操作系统定制方法的缺陷,本文提出一种对VxWorks实时操作系统进行扩展、修改、裁剪的定制方法。此方法操作简单方便,保证定制灵活性的同时,兼顾安全性、稳定性。
1.1Tornado编译VxWorks映像的流程
在Tornado集成开发环境下编译VxWorks映像时,首先新建一个bootable型工程,则在“Files”选项卡中会按默认配置、自动生成prjConfig.c、linkSym.c等源文件;在界面中的VxWorks选项卡中,用户根据项目需要,exclude不需要的组件、include需要的组件;点击“rebuild all”,则Tornado会根据当前组件选择,以00vxWorks.cdf、00bsp.cdf文件为规则,修改prjConfig.c、linkSym.c等源文件的源代码,然后编译链接。编译链接过程中,prjConfig.c、linkSym.c等源文件首先被编译为o格式目标文件,然后与已经编译好的libXXX.a库链接,生成VxWorks映像。
生成VxWorks映像所需要的组件源码,全部来源于预先编译好的静态库libXXX.a。prjConfig.c、linkSym.c等源文件,只是根据用户选择调用了所需组件的初始化函数,以提示连接器从静态库libXXX.a中,选择需要的o文件链接到VxWorks映像。因此,静态库libXXX.a非常重要,下面详细阐述。
1.2静态库的重要作用
在tornado编译bootable型工程前,Tornado argetlib文件夹里的libXXX.a文件已经编译好,它是由src文件夹里的.c源文件、遵循rules.library等编译文件的规则编译、链接而成的,里面包含了VxWorks支持的全部库函数。
libXXX.a是预先编译好的、不变的,它内部哪些.o文件会参与链接生成VxWorks,是由prjConfig.c、linkSyms. c这些生成代码直接决定的。比如,memPartLib.o已链接在libSPARCgnuvx.a中,如果界面中选择了组件“minimal memory allocator”,则会在prjConfig.c文件中生成调用函数memPartLibInit()的代码;链接器查找每个.o文件的符号表,发现memPartLibInit()函数是在memPartLib.o中实现的,就会把memPartLib.o文件链接进VxWorks映像。
1.3基于Tornado编译原理的定制方法概述
通过以上分析可知:由cdf文件规则生成prjConfig. c、linkSyms.c代码的原理,可以实现Tornado界面中组件选项的扩展、修改;利用Tornado集成开发环境对VxWorks裁剪的支持,可以实现对VxWorks映像的粗粒度裁剪;根据a格式静态库的编译原理与作用,可以完成对VxWorks映像的细粒度裁剪。下面几个小节将分别介绍,应用这些原理实现定制VxWorks映像的方法。
VxWorks的可裁剪性特点使开发者可以根据自己应用程序的需要,在Tornado的VxWorks选项卡中,include需要的组件,exclude不需要的组件,达到对VxWorks粗粒度裁剪的目的。但是,这样的裁剪方法也具有局限性:某个组件,只能整体保留或删除,不能选择性保留一个模块中的部分代码。所以,有必要对VxWorks映像进行细粒度裁剪。
2.1细粒度裁剪的意义
tornado新建的bootable型映像,一般包含prjConfig. c、linkSyms.c、usrAppInit.c等文件。在组件选项中,不同的选择方式会在prjConfig.c和linkSyms.c中生成不同的代码。这些代码调用了哪些函数,在链接生成vxWorks映像时,会从libXXX.a中选择这些函数所在的.o文件,把整个.o文件链接进vxWorks映像。
有一些函数,比如fioLib.c文件中的sprintf()函数,是一个非常常用的函数。但是,同样在fioLib.c中的scanf()函数用户就有可能不使用。但是,fioLib.o会作为一个整体从libSPARCgnuvx.a中被链接到vxWorks映像中,造成vxWorks映像体积有一些没必要的增加。
如果能把fioLib.c文件中的scanf()等不使用的函数删除,然后编译成.o,再链接进.a,那么bootable型映像编译链接时,就能避免把没必要的函数加入映像,起到体积裁剪的效果。所以,函数级裁剪时非常必要的,如果对适合的文件做函数级裁剪,效果是非常显著的。
2.2细粒度裁剪的流程
以fioLib.c文件的函数级裁剪为例:
(1)在fioLib.c文件中裁减掉不适用的函数。
(2)用downloadable型工程,编译fioLib.c文件,生成fioLib.o。
注意:必须手工修改编译选项“-g”为“-O3”
(3)使用命令行,把libSPARCgnuvx.a中原来的fioLib.o替换为已经裁剪的fioLib.o。
使用命令为:ar -r libSPARCgnuvx.a fioLib.o
(4)重新编译bootable型映像,会发现映像变小了,说明裁剪有效。
2.3细粒度裁剪的效果演示
2.3.1memPartLib.c的裁剪:减小3.6%
首先,做内存的细粒度裁剪。vxWorks内存文件已经分为memPartLib.c和memLib.c,对应着tornado组件选项中的“minimal memory allocator”和“full featured memory allocator”。其中,memLib.c在粗粒度裁剪中已经被exclude。
由此可见,memPartLib.c已经是一个很基本、小巧的内存管理文件了,可裁剪掉空间不大。对memPartLib. c做函数级裁剪时,去掉了可以创建多个分区的功能,即memPartCreate()和memPartDestroy()两个函数,其他函数必须保留。经过这个裁剪后的效果如下:
裁剪前 裁剪后 减小比例memPartLib.c 6,989 6,736 3.6%
2.3.2fioLib.c的裁剪:减小45.2%
由于memPartLib.c文件的裁剪效果不明显,不能体现函数级裁剪的必要性,所以又做了fioLib.c文件的裁剪。fioLib. c是格式化输入输出模块,在tornado中include组件“formatted IO”,会自动include组件“IO system”(对应文件为ioLib.c)。
fioLib.c文件裁剪前比较大(14KB),且各个函数间耦合性弱,许多函数用户并不需要,所以此文件裁剪空间比较大。裁减掉了sscanf()函数相关的函数(如下图所示),printf()、sprintf()、fioRead()、fioRdString()等函数仍然可以正常使用。
裁剪后的效果,如下表所示:
裁剪前 裁剪后 比较fioLib.o大小 14KB(13,418) 8KB(7,349) 减小比例45.2% vxWorks大小 92KB(93,249) 88KB(89,294) 减小比例4.2%
本文在明确Tornado编译VxWorks映像原理的基础上,详细阐述了扩展组件选项、粗粒度裁剪、细粒度裁剪的方法,实现了对VxWorks定制的方法。既保障了操作的简便性、灵活性,又保障了VxWorks映像的安全性、稳定性。
参考文献
[1]张芊,赵宇.计算机的现状及关键技术[J].企业导报,2011(17).
[2]王戬.云计算关键技术及其发展的分析[J].科技创新与应用,2013(28).
[3]张晓洲.云计算关键技术及发展现状研究[J].网络与信息,2011(09).
李丽颖(1987-),女,黑龙江齐齐哈尔人,硕士研究生,助理工程师,研究方向:操作系统分析与优化。
作者简介: