VxWorks在S3C2410上的BSP设计
摘要:VxWorks是美国WindRiver公司设计开发的一种嵌入式实时操作系统,可移植性是对嵌入式操作系统的一个重要要求,VxWorks BSP(板极支持包)正是实现可移植性的中间层软件,使操作系统的应用代码独立于具体硬件.本文介绍了VxWorks BSP的开发,分析了VxWorks的启动过程,给出了基于三星S3C2410处理器开发板的BSP设计以及VxWorks的映像编译下载,其中重点介绍了BSP中几个重要文件和函数的设计,最后提出了开发调试过程中的几个注意点。
1 引言
VxWorks是美国WindRiver公司设计开发的一款嵌入式实时操作系统。能支持多种微处理器:PowerPC,x86,MIPS,ARM,SPARC等。它采用微内核结构,具有高可靠性、实时性、丰富的网络协议、良好的兼容性以及可裁减性等特点,同时具有友好的用户开发环境。其中VxWorks很好的移植性通过BSP来实现,BSP使操作系统能够独立于具体硬件,对上层屏蔽具体的硬件,为系统组件以及应用程序提供统一的接口。
本文主要研究如何将VxWorks操作系统移植到基于三星S3C2410处理器硬件平台上,即BSP的设计。主要内容包括下面两点:熟悉并掌握VxWorks映像种类,系统的启动顺序和过程,以及BSP软件包中各文件的组成和作用以及相应的设置文件的修改;二是熟悉系统底层驱动,也就是要对开发板的硬件环境有一个初步了解,这样才可以结合具体硬件开发板设计出相应的底层驱动程序。
2 BSP组成
2.1 BSP概念
对于嵌入式系统而言,并没有像PC那样的标准,存在着各种不同的嵌入式硬件平台,这就使得无法完全由操作系统来实现上层软件与底层硬件的无关性。BSP正是采用当今嵌入式分层设计的介于操作系统和底层硬件的中间层。BSP通常是指针对具体的硬件平台,用户所编写的启动代码和部分设备驱动程序的集合。它所实现的功能包括初始化,驱动部分设备.最基本的BSP仅需要支持处理机复位,初始化,驱动串口和必要的时钟处理。BSP的概念只是针对嵌入式操作系统而言的,而像DOS,Windows,UNIX等BIOS操作系统是无BSP可言的。不过到目前为止,
嵌入式系统中也没有对BSP有明确统一的定义,不同的嵌入式系统BSP实现的功能有所差别。在VxWorks系统中,对BSP描述为介于底层硬件环境和VxWorks之间的软件接口,它的主要功能是系统加电后初始化目标机硬件,初始化操作系统及提供部分硬件的驱动程序。
2.2 BSP组成
其主要的两部分组成为:初始化代码,硬件驱动程序.
BSP的初始化部分是指从上电复位开始直到WIND内核和usrRoot()函数启动的这段时间内系统的执行过程.具体包括:CPU初始化,设备初始化以及系统初始化.CPU初始化CPU内部寄存器,设备初始化智能I/O的寄存器,将板上设备打通;系统初始化为系统的运行准备数据结构,进行数据初始化.其初始化过程如图1所示:
图1初始化过程
驱动程序就是一些包含I/O操作的子函数.VxWorks系统的驱动程序也可以抽象为三个层次:常规操作,与I/O的接口,以及与组件的接口.其抽象逻辑如图2所示.驱动程序与I/O系统的接口使驱动具有更好的层次性,驱动程序与组件的接口使驱动具有更好的抽象性.
图2驱动程序抽象逻辑
3 VxWorks映像分类及启动过程
VxWorks映像可以分为两大类:可下载映像和可引导映像。可加载型映像的执行首先由固化在目标机上的引导代码,通过串口或者网口将系统映像从宿主机上装载到目标机RAM中,然后继续执行;可引导型映像与可加载映像不同,它是将引导程序和VxWorks融为一体的映像,往往是最终产品,常常直接烧入ROM或者Flash。
两种类型的映像都可以分成两步,第一步为系统加电后对必要的硬件进行初始化,这一步目的就是为了加载系统映像,所以在这一步不需要做太多的工作;第二步为系统加载后首先就是对系统硬件作完整的初始化过程,然后完成系统内核初始化,这一切处理完之后跳入用户应用程序。两种类型的启动过程如图3所示。
图3 VxWorks映像启动过程
可加载映像包括两部分:boot ROM以及VxWorks。这两部分是独立创建的。加载型映像引导主要是用于开发调试阶段。
可加载型映像引导过程如下:
1)引导代码的装入。系统加电后执行首段引导代码,把引导代码段和数据段从ROM或者Flash中装入RAM中的RAM-HIGH-ADRS。Boot ROM可分为如下三种类型:被压缩的boot ROM映像,非压缩的boot ROM映像以及驻留ROM的boot ROM映像。对于压缩型引导代码,这种类型的引导代码在拷贝时对它进行解压操作;对于非压缩型引导代码,这种类型的引导代码直接进行拷贝操作;驻留型引导代码仅仅拷贝它的数据段到RAM中。
2)VxWorks映像的载入。引导代码执行后,把VxWorks映像装入到RAM中RAM-LOW-ADRS,然后跳转到VxWorks映像装入点.
3)系统初始化.由VxWorks映像中的系统初始化代码来执行,完成系统初始化操作.
可引导型映像引导包括不驻留ROM的映像和驻留ROM的映像两种类型.对于驻留ROM的VxWorks映像,引导程序只把VxWorks映像的数据段和堆栈段复制到RAM的RAM-LOW-ADRS,代码段则驻留在ROM中。驻留型VxWorks映像主要是为了节省RAM空间,以便应用程序有更大的空间运行,但缺点是运行速度慢。随着片外扩展RAM空间越来越大,不需要采用不驻留ROM映像。其引导过程与可加载型类似,主要不同在系统加电时候,首先执行的是romInit.s中的函数romInit(),完成最基本的初始化后跳入到bootInit.c中的romStart()函数,来完成装载VxWorks映像的工作。接下来的启动过程和上面所描述的可加载型一样。