1 、 导言
VxWorks是由美国的WindRiver推出的一种嵌入式强实时操作体系,它存在多使命调度的办法,能够办理多个外设,而且它可依据运用程序的需求对操作体系进行裁剪,最大程度的紧缩代码,完结程序的优化。
Intelx86系列处理器的嵌入式运用一般是以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机的BIOS。
VxWorks内核的加载分为两个进程,第一个进程是PCBIOS对bootrom的加载,第二个进程是BSP引导映像bootrom对VxWorks操作体系映像加载。根本流程如下所示:
2.3 BSP中函数调用进程剖析
BSP发动操作体系的进程中,需求调用一列函数以完结对体系内存映像的加载,整个进程剖析如下,RomInit函数初始化处理器,封闭高速缓存,关中止,初始化内存。接着调用RomStart,把映像的数据段拷贝到RAM中去,然后调用usrInit()对Bss段清零,调用intVecBaseSet()设置矢量基地址表,调用excVecInt()初始化中止以及反常的向量表,初始化体系硬件,调用 usrKernelInit()初始化wind内核,终究履行流程履行到kernelInit(),kernelInit发动wind内核。Wind内核的第一个使命是usrRoot它经过调用usrAppInit发动用户的使命,体系可真实发动。
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,sysNetif.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_WARM_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后运用idedetection就能够查看到CF卡几许参数,依据查到CF卡的几许参数,就能够在sysLib.c中做出相应的修正。
2.5 BSP的调试
针对板载支撑包的规划开发,VxWorks并没有供给了非常好的调试手法,这样就给调试BSP带来的很大困难。所以在对 BSP进行调试之前,尽量削减代码量,经过改写BSP目录下Makefile来去除不需求的代码编译,然后再对BSP调试。调试的办法一般选用闪灯的办法,经过在有疑问的代码之间刺进闪灯的代码,经过对I/O端口的可视LED拜访,调查灯是否闪亮来判别BSP的履行流程。
3 、 结束语
经过屡次实验的调试,终究规划出了依据PC104总线的VxWorks板载支撑包。并运用于某型飞机燃油体系的智能化办理,实践结果表明,这种办法是一种切实可行的计划。
责任编辑:gt