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启动用户的任务,系统可真正启动。