1 、 引言
VxWorks是由美国的WindRiver推出的一种嵌入式强实时操作系统,它存在多任务调度的方式,可以管理多个外设,而且它可根据应用程序的需求对操作系统进行裁剪,最大程度的压缩代码,实现程序的优化。
Intel x86系列处理器的嵌入式应用一般是以PC104的形式出现的,PC104除包括PC/AT的所有标准功能外,它的 CPU 模块还有一些独特的优点:开发周期短、费用低、体积小、层叠连接、功耗小、 模块化 、抗冲击及震动能力强,工作及 存储 温度范围宽、集成度高,可靠性高。
在PC/104总线设备上使用的数据存储设备通常有硬盘和基于闪存技术的固态电子盘。由于嵌入式系统工作环境一般比较恶劣,硬盘在恶劣的震动条件下无法正常工作,而固态电子盘的工作范围很宽,可以选择相应环境下的器件(零下40℃到零上85℃),并且体积很小,适合嵌入式应用。本嵌入式系统中数据存储设备采用了CE公司的CF(CompactFlash)卡,而在此软硬件平台上设计开发了嵌入式实时操作系统VxWorks 的并基于PC104总线的板载支持包。
2、 VxWorks板载支持包BSP设计
2.1 基于PC104总线设备的VxWorks操作系统映像开发
在实时操作系统VxWorks中,硬件抽象层是以板载支持包BSP的形式出现的。针对不同的处理器体系结构以及硬件环境设计不同的板载支持包,实时操作系统VxWorks就可以用于不同的硬件环境,大大减少了资源浪费。因为板载支持包同时具有硬件相关性和操作系统相关性,是一个介于硬件与软件之间的软件层次,包括了系统中的大部分与硬件相关的软件模块。VxWorks板载支持包BSP的设计概念使嵌入式实时操作系统 VxWorks成为一个通用的嵌入式软件开发包,使得相关的高层的嵌入式应用能够有效地运行于特定的、应用相关的硬件设备之上,使嵌入式实时操作系统 VxWorks的可移植性大大加强。
BSP与VxWorks操作系统的层次结构如下图1所示:
基于PC104总线设备的VxWorks操作系统映像开发主要工作有3个方面:
①板载支持包设计与开发
VxWorks实时操作系统的板载支持包的开发通常提供一般模板程序,选择一个相同处理器结构板载支持包进行设计。
②相关外围硬件设备驱动程序
嵌入式系统是针对某一具体应用场合开发的专用系统,因此常常会使用到一些非标准的硬件设备,而VxWorks操作系统并不提供相关的外设驱动程序,使用时需自行开发相应的外设驱动程序。
③操作系统映像配置与生成
对VxWorks操作系统各个功能模块进行配置,使其在满足功能需求的条件下达到代码量最小,同时也减少出错的可能性。
2.2 BSP的基本功能及其启动过程分析
VxWorks板级支持包BSP在功能上包含两个部分:初始化和驱动程序支持。BSP提供了VxWorks同硬件环境的基本 接口 界面,并在上电时进行硬件初始化(包括中断向量的初始化、 定时器 初始化、核心内存映象的加载等),支持VxWorks对硬件驱动的访问,将 VxWorks中软件集成到一体,其功能相当于PC机的B IOS 。
VxWorks内核的加载分为两个步骤,第一个步骤是 PCB IOS对boot rom 的加载,第二个步骤是BSP引导映像bootrom对VxWorks操作系统映像加载。基本流程如下所示:
2.3 BSP中函数调用过程分析
BSP启动操作系统的过程中,需要调用一列函数以完成对系统内存映像的加载,整个过程分析如下,Ro mI nit函数初始化处理器,关闭高速缓存,关中断,初始化内存。接着调用RomStart,把映像的数据段拷贝到 RAM 中去,然后调用usrInit()对Bss段清零,调用intVecBaseSet()设置矢量基地址表,调用excVecInt()初始化中断以及异常的向量表,初始化系统硬件,调用 usrKernelInit()初始化wind内核,最后执行流程执行到kernelInit(),kernelInit启动wind内核。Wind内核的第一个任务是usrRoot它通过调用usrAp pI nit启动用户的任务,系统可真正启动。
2.4 修改BSP设计概要
一般情况下,Tornado提供一些 评估板 的板载支持包,而PC104主机板是根据工作实际需要购买的,评估板的板载支持包不能够直接使用,需要进行修改完善。可行的方法是:基于pc586的BSP作为模板进行适当修改,以满足这款PC104主机板的特定硬件环境。
板载支持包通常存放在Tornado的安装目录下面,其路径是Root/target/config /bspname,root代表tornado的安装目录。设计一个可用的新的板载支持包,必须对Tornado本身自带板载支持包作一定的分析。 pc586板载支持包主要包括一些C文件和一些汇编文件,它们是:config.h,configAll.h,Pc.h,sysLib.c,ctdt.c,sysNet if .c,mkboot.c。板载支持包的缺省配置是由configALL.h来确定的,用户可通过config.h来改变缺省配置。缺省配置是按照处理器厂商的评估板外围硬件进行系统配置,根据实际硬件环境,一般需要做一定的改动,通常会在config.h中进行,通过一系列的定义宏,完成系统配制工作。
要设计针对这个半物理仿真试验的所选用的PC104主机板板载支持包,增加VxWorks对CF卡支持,需要做出较大改动的文件是config.h和configAll.h以及sysLib.c这3个文件,具体如下:
①在config/bspname/bspname.h中找到修改其CF卡的中断号,因为一般中断号0x9是预留给硬盘接口,为了避免产生中断冲突,将#define ATA1_INT_LVL0x9,改为#define ATA1_INT_LVL0xf
②在config/bspname/sysLib.c中找到ATA_RESOURCEataResource[]={。..。..。..。..。...PCMCIA.。..。..。..。..。.. }
修改为ATA_RESOURCEataResource[]={。..。..。..。..。...IDE_LOCAL.。..。..。..。..。..。 }
另外还需要改写其他的参数,例如ATA1_CONFIG等。
③在config.h中,把#define SYS_W ARM _ATA_CTRL 0改为#define SYS_WARM_ATA_CTRL 1这样系统热启动后,就会从CF卡上的引导区上引导。
④在config.h中将#define SYS_WARM_TYPE SYS_WARM_FD/*warmstartdevice*/改为#define SYS_WARM_TYPESYS_WARM_ATA
⑤修改ataType数组使它和所选的CF卡的几何参数(磁道,扇区,柱面等)相等。
将原来的ataTypes数组ATA_TYPEataTypes[ATA_MAX_CTRLS] [ATA_MAX_DRIVES]= {。..。..。..。..。..。{{761,8,39,512,0xff},/*ctrl1drive0*/。..。..。..。..。..};
改为ATA_TYPE ataTypes [ATA_MAX_CTRLS] [ATA_MAX_DRIVES]= {。..。..。..。..。..。{{984,16,4,512,0xff},/*ctrl1drive0*/。..。..。..。..。..};
这个参数可以在主机板的BIOS中查找到,进入BIOS后使用idede te c ti on就可以查看到CF卡几何参数,根据查到CF卡的几何参数,就可以在sysLib.c中做出相应的修改。
2.5 BSP的调试
针对板载支持包的设计开发,VxWorks并没有提供了非常好的调试手段,这样就给调试BSP带来的很大困难。所以在对 BSP进行调试之前,尽量减少代码量,通过改写BSP目录下Makefile来去除不需要的代码编译,然后再对BSP调试。调试的方式一般采用闪灯的方式,通过在有疑问的代码之间插入闪灯的代码,通过对 I/O 端口的可视 LED 访问,观察灯是否闪亮来判断BSP的执行流程。
3 、 结束语
通过多次试验的调试,最终设计出了基于PC104总线的VxWorks板载支持包。并应用于某型飞机燃油系统的智能化管理,实践结果表明,这种方法是一种切实可行的方案。
责任编辑:gt