2009-07-06
引言
目前嵌入式系统开发已经成为了计算机工业最热门的领域之一,嵌入式系统应用渗透到信息家电、工业控制、通信与电子设备、人工智能设备等诸多领域。嵌入式操作系统的引入大大提高了嵌入式系统的功能,方便了嵌入式应用软件的设计,但相应也占用了宝贵的嵌入式系统资源。同时,因为嵌入式应用系统配置差别较大,I/O操作也没有标准化,这部分驱动软件常常由应用程序提供,这就要求在开发环境中能够对用户选定的实时操作系统进行剪裁和扩展,并和应用程序绑定在一起生成一个可运行在目标环境下的应用系统。所以针对不同应用需求裁减掉不需要的操作系统模块,配置特定的嵌入式操作系统是降低系统硬件成本, 减少系统资源消耗,提高系统灵活性的关键。
嵌入式操作系统大多采用构件化、模块化的设计思想,以搭积木的方式通过互连构造软件因而是可配置的。但是由于操作系统的多样性,不同操作系统提供的配置方式迥异且繁简不一。例如:风河公司的VxWoks操作系统,其开发环境Tornado提供的配置工具可以对操作系统模块进行选择和删除,但其配置主要还是通过用户对目标系统目录树下相关配置文件进行手工编辑和修改来完成的;科银京成公司。Delta OS的配套开发环境Lambda Tool,可以简单对内核参数、文件系统参数和网络系统参数进行设定。由于硬 件平台的多样性,即使是相同操作系统,其配置也是有差别的。应用程序开发者必须熟悉不同的硬件平台和不同的操作系统才能进行可行的应用的开发,增加了应用开发的难度。
对于嵌入式应用的行业开发,往往提供了多种操作系统供应用开发者选择。如果能提供一套统一的操作系统配置工具,那么应用开发者不必因为选择不同的操作系统而重新学习使用新的配置环境,必然能提高开发效率,这在行业开发中有着重要意义。
本文将软件复用技术用于嵌入式操作系统的定制过程,提出了一个嵌入式操作系统定制过程的通用模型(OSTAILOR),并在此基础上研究设计了基于嵌入式Linux的配置剪裁器。
1、嵌入式操作系统配置通用化模型
以操作系统抽象模块作为操作系统配置的基本单位,在此基础上得到了嵌入式操作系统配置通用化模型OSCFG。
1.1 模型概述
如图1所示,虚线框表示建立的操作系统配置模型。左边的两个实线框表示对于操作系统配置模型的输入:选择配置的操作系统类型和选择配置的操作系统抽象模块。右边的实线框表示输出的配置生成结果:特定的配置文件。
评论1
楼主 2009/7/6 13:19:50
图4中最下层是原子级模块,它抽象了操作系统的基本功能,包括任务(task)、I/O驱动(driver)、定时器(timel)、信号量(sernaphore)、消息队列(quecue)、事件(event group)、邮箱(mailBox)、管道(pipe)等。除此之外,还包括一些基本的应用功能。之所以取名为原子级模块,是为了表明它是不可再分的基本模块,是配置其它层次模块的基础。
原子级模块的粒度存在于目标代码或库文件级,因为它映射的物理实体以目标代码或库文件存在。虽然在图4的层次结构中,它也是作为抽象的逻辑模块存在,但是它是和物理实体联系最紧密的一层,也是模块粒度最细的一层。因而在配置过程结束以后,通过这层映射到不同的文件,产生不同格式的配置文件,达到配置不同操作系统的目的。原子级模块完成的只是某一特定功能的一部分,或者只是某一特定功能一个子功能,必须和其它原子级模块相结台才能发挥应有的作用。因而在它的上层提出了功能级模块的概念。
功能级模块由原子级模块配置生成。通过把不同的原子级模块结合在一起,完成某一特定功能,并加大了模块粒度。例如,配置无线上网的功能模块,除了要选择无线上网本身这个原子级模块,还需要选择操作系统中支持上网功能的原子级模块,比如TCP/IP协议栈。
通过把功能级模块组装在一起,完成更强大的功能,就构成了应用级模块。每一个应用级模块都是一个功能模块集,也是粒度最大的一层模块。对于应用程序开发者,为了开发特定的应用程序,如果不想选择细粒度的模块,可以直接选择应用级模块来配置操作系统。
这种模块化的分层结构,能为开发者提供不同的模块粒度,使用户可以根据需要,选择不同层次的模块,以便增强定制过程的灵活性;而其最大的优点是,对于每一次定制需求的改变,不必由最细粒度的原子级模块配置重新做起,而是可以对需求改变进行分析,替换掉恰当粒度的模块,保持其它部分不变,简化了配置过程,减少了配置时间。
(3) 模块层次的解析
模块解析和模块配置过程正好相反。模块配置是从最底层开始,逐层构建出高层模块;而模块解析则从最上层开始,层层向下,直到寻找到最下层的映射关系,同时构造出对应的关系图。
基于对模块的封装,每层模块只关心和它紧密联系的下层模块的映射关系,即它是由下层的什么模块所构成的。为此,我们在配置生成每一个模块时,将它对下层的映射关系保存在数据库中。
逐层解析时,我们把模块名作为关系图的顶层结点,并在数据库中查找它对下层模块的映射关系。根据映射关系中涉及的下层模块,如果关系图中不存在它对应的结点,在关系图中添加新的结点,每个新结点对应一个下层模块名。根据映射关系,添加图中的拓扑关系。再将每个新结点作为一个新的顶层结点,重复刚才的过程,直至最终映射到原子级构件,则构造出一个完整的关系图。可以说,关系图生成的过程也就是整个映射的过程。算法描述如图5所示。