基于VxWorks的BSP概念与开发
互联网
摘要:本文以VxWorks操作系统为例阐述了BSP的概念和系统启动流程,并描述了BSP的开发过程。关键词:BSP;VxWorks;...
Abstract:
Key words :
摘 要:本文以
VxWorks操作系统为例阐述了
BSP的概念和系统启动流程,并描述了BSP的开发过程。
关键词:BSP;VxWorks; 镜像; boot Rom
概述
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它采用微内核的结构,具有支持多种处理器,丰富的网络协议,良好的兼容性和裁减性等特点,同时具有程序动态链接和下载的功能。
BSP(Board Support Packet——板级支持包)是介于底层硬件和上层软件之间的底层软件开发包,它主要功能为屏蔽硬件,提供操作系统的驱动及硬件驱动,具体功能包括:
·单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持;
·为操作系统提供设备驱动程序和系统中断服务程序;
·定制操作系统的功能,为软件系统提供一个实时多任务的运行环境;
·初始化操作系统,为操作系统的正常运行做好准备;
BSP在VxWorks系统中的地位见图1。
BSP文件在vxworks/target/config/all和vxworks/target/config/bspname文件夹里。其中,all文件夹里的文件是所有BSP的通用文件,bspname文件夹的文件是用户自己定制的BSP文件。
经过编译、链接,并在makefile和depend. bspname等文件的控制下,原程序最后将生成镜像。VxWorks的镜像可分为两类:可下载镜像和可引导镜像。
·可下载镜像(Loadable Image):实际包括两部分,一是vxWorks,二是boot ROM,两部分是独立创建的。其中boot ROM包括被压缩的boot ROM镜像(bootrom)、非压缩的boot ROM镜像(bootrom_uncmp)和驻留ROM的boot ROM镜像(bootrom_res)三种类型;
·可引导镜像(Bootable Image):是将引导程序和vxWorks融为一体的镜像,它常常是最终产品,包括不驻留ROM的镜像和驻留ROM的镜像两种类型。
VxWorks系统启动流程
一般来说,所有处理器的VxWorks系统启动流程都是相似的,但有些处理器会有一些特殊的步骤,而另一些处理器会跳过几个步骤。
下面以CPU为ARM7TDMI为例具体描述(见表1)。
对于可引导镜像在usrConfig.c文件里执行,对于可下载镜像在bootConfig.c文件里执行。
图2为压缩的可引导镜像的启动过程图示,其中所用到的地址的说明见表2。
BSP的开发过程
建立开发环境
主要是以目标板CPU的BSP文件为模板,在 ornado argetconfig目录下创建用户的BSP目录bspname,把 ornado argetconfigall下的文件和BSP模板文件拷贝到该目录下,根据具体情况选择合适的VxWorks镜像类型。
修改模板程序
Makefile
Makefile文件控制镜像的创建,在Makefile文件里使用了将近135个宏,最简单的Makefile文件要包含以下的宏:
·CPU:目标板CPU的类型;
·TOOL:主机的make工具,为GNU;
·TGT_DIR:target路径,默认为$(WIND_BASE)/target;
·TARGET_DIR:BSP目录名;
·VENDER:目标板生产商名;
·BOARD:目标板名;
·ROM_TEXT_ADRS:boot ROM的入口地址(以16进制表示,并且与config.h文件定义相同);
·ROM_SIZE:ROM的大小;
·RAM_LOW_ADRS:加载vxWorks的目标地址;
·RAM_HIGH_ADRS:boot ROM拷贝到RAM的目标地址;
·HEX_FLAGS:特殊结构的标记,用于产生S-记录文件;
·MACH_EXTRA:扩展文件,用户可以加入自己的目标模块;
·除此以外,Makefile文件还需要包括以下文件:
·$(TGT_DIR)/h/make/defs.bsp:Vxworks系统运行的标准变量定义;
·$(TGT_DIR)/h/make/make.$(CPU)$(TOOL):提供了特别的目标机结构和一套编译工具,如make. ARM7TDMI_Tgnu;
·$(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE):提供了与主机系统有关的定义;
·rules.bsp:在创建目标文件时所需要的规则;
·rules. $(WIND_HOST_TYPE):指出创建目标文件时所需的从属文件表;
·如果没有用all目录下的文件而是拷贝到bspname下修改并使用,需要定义与这些文件有关的宏,如
BOOTINIT=bootInit.c
这样在创建镜像时就不会用all目录下的文件而使用bspname目录下的相应文件了;
·在Makefile文件里凡是16进制数前面都无需加“0x”;
bspname.h
根据具体目标板设置串行接口、时钟以及I/O设备等。在该文件中必须包含以下内容:
·中断向量/级别
·I/O设备地址
·设备寄存器位的含义
·系统和附加时钟参数(最大和最小速率)
config.h
根据目标板的具体情况配置宏定义,注意ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS要与Makefile文件里定义的一致,LOCAL_MEM_LOCAL_ADRS和LOCAL_MEM_SIZE要正确。
romInit.s
这是系统上电后运行的第一个程序,根据具体目标板对寄存器和CPU进行设置;以CPU为ARM7TDMI为例,romInit.s 需要进行的工作有:
·保存启动方式:对于冷启动,如果CPU配置的是HIGH VECTORS,就设置入口地址为0xFFFF0000,否则设置入口地址为0x00000000;
·屏蔽中断:通过设置cpsr的I_BIT和F_BIT都为1来实现,还要设置中断寄存器为关模式,同时设定运行模式为SVC32模式;
·初始化堆栈指针pc和sp:堆栈指针sp指向STACK_ADRS,这个宏的定义为当镜像为驻留ROM时,该宏值为_sdata,当镜像为非驻留ROM时该宏值为_romInit,这两个地址经过地址映射后都指向被拷贝镜像在RAM的目标地址;
·初始化cache,屏蔽cache;
·根据具体目标板的需要初始化其他寄存器;
·指针跳转到romStart()函数并执行;
bootConfig.c
一般不需要用户修改,也可以根据具体情况做适当修改;
sysALib.s
与romInit.s文件实现的功能相似,但如果在romInit.s文件里对DRAM和内存控制器进行了初始化在这里不再进行这项工作;
创建VxWorks镜像
根据具体需要在命令行环境下利用Makefile创建各种镜像,也可以在Tornado的集成环境下Build菜单中选择Build Boot ROM来创建各种类型的Boot ROM;
除此以外,如果系统硬件包括串口,还要根据具体情况修改sysSerial.c文件;如果包含网络部分要修改configNet.h;如果包含NVRAM要修改bootnv.h文件。总之,BSP的开发要根据具体目标板的硬件进行。
结语
我们已经利用基于VxWorks的BSP开发包成功的进行了线缆调制解调器的底层软件开发。在开发过程中深感BSP在整个系统软件中的重要性——没有正确的BSP软件,整个系统的启动和运行也不会正确。另外需要强调的是:BSP的概念只是针对嵌入式操作系统而言的,而像DOS、WINDOWS、UNIX等BIOS操作系统是无BSP可言的。对同一目标板而言,不同操作系统的BSP在本质上是一样的,但是不同的操作系统将提供不同的支持库,另外在BSP结构上也可能会有所不同,在做BSP移植的时候应该注意。■
参考文献
1. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 2.0,Edition 1,1999
2. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 1.0.1,Edition 1,1997
3. VxWorks Programmer誷 Guides,Edition 1,1999
关键词:BSP;VxWorks; 镜像; boot Rom
概述
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它采用微内核的结构,具有支持多种处理器,丰富的网络协议,良好的兼容性和裁减性等特点,同时具有程序动态链接和下载的功能。
BSP(Board Support Packet——板级支持包)是介于底层硬件和上层软件之间的底层软件开发包,它主要功能为屏蔽硬件,提供操作系统的驱动及硬件驱动,具体功能包括:
·单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持;
·为操作系统提供设备驱动程序和系统中断服务程序;
·定制操作系统的功能,为软件系统提供一个实时多任务的运行环境;
·初始化操作系统,为操作系统的正常运行做好准备;
BSP在VxWorks系统中的地位见图1。
BSP文件在vxworks/target/config/all和vxworks/target/config/bspname文件夹里。其中,all文件夹里的文件是所有BSP的通用文件,bspname文件夹的文件是用户自己定制的BSP文件。
经过编译、链接,并在makefile和depend. bspname等文件的控制下,原程序最后将生成镜像。VxWorks的镜像可分为两类:可下载镜像和可引导镜像。
·可下载镜像(Loadable Image):实际包括两部分,一是vxWorks,二是boot ROM,两部分是独立创建的。其中boot ROM包括被压缩的boot ROM镜像(bootrom)、非压缩的boot ROM镜像(bootrom_uncmp)和驻留ROM的boot ROM镜像(bootrom_res)三种类型;
·可引导镜像(Bootable Image):是将引导程序和vxWorks融为一体的镜像,它常常是最终产品,包括不驻留ROM的镜像和驻留ROM的镜像两种类型。
VxWorks系统启动流程
一般来说,所有处理器的VxWorks系统启动流程都是相似的,但有些处理器会有一些特殊的步骤,而另一些处理器会跳过几个步骤。
下面以CPU为ARM7TDMI为例具体描述(见表1)。
对于可引导镜像在usrConfig.c文件里执行,对于可下载镜像在bootConfig.c文件里执行。
图2为压缩的可引导镜像的启动过程图示,其中所用到的地址的说明见表2。
BSP的开发过程
建立开发环境
主要是以目标板CPU的BSP文件为模板,在 ornado argetconfig目录下创建用户的BSP目录bspname,把 ornado argetconfigall下的文件和BSP模板文件拷贝到该目录下,根据具体情况选择合适的VxWorks镜像类型。
修改模板程序
Makefile
Makefile文件控制镜像的创建,在Makefile文件里使用了将近135个宏,最简单的Makefile文件要包含以下的宏:
·CPU:目标板CPU的类型;
·TOOL:主机的make工具,为GNU;
·TGT_DIR:target路径,默认为$(WIND_BASE)/target;
·TARGET_DIR:BSP目录名;
·VENDER:目标板生产商名;
·BOARD:目标板名;
·ROM_TEXT_ADRS:boot ROM的入口地址(以16进制表示,并且与config.h文件定义相同);
·ROM_SIZE:ROM的大小;
·RAM_LOW_ADRS:加载vxWorks的目标地址;
·RAM_HIGH_ADRS:boot ROM拷贝到RAM的目标地址;
·HEX_FLAGS:特殊结构的标记,用于产生S-记录文件;
·MACH_EXTRA:扩展文件,用户可以加入自己的目标模块;
·除此以外,Makefile文件还需要包括以下文件:
·$(TGT_DIR)/h/make/defs.bsp:Vxworks系统运行的标准变量定义;
·$(TGT_DIR)/h/make/make.$(CPU)$(TOOL):提供了特别的目标机结构和一套编译工具,如make. ARM7TDMI_Tgnu;
·$(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE):提供了与主机系统有关的定义;
·rules.bsp:在创建目标文件时所需要的规则;
·rules. $(WIND_HOST_TYPE):指出创建目标文件时所需的从属文件表;
·如果没有用all目录下的文件而是拷贝到bspname下修改并使用,需要定义与这些文件有关的宏,如
BOOTINIT=bootInit.c
这样在创建镜像时就不会用all目录下的文件而使用bspname目录下的相应文件了;
·在Makefile文件里凡是16进制数前面都无需加“0x”;
bspname.h
根据具体目标板设置串行接口、时钟以及I/O设备等。在该文件中必须包含以下内容:
·中断向量/级别
·I/O设备地址
·设备寄存器位的含义
·系统和附加时钟参数(最大和最小速率)
config.h
根据目标板的具体情况配置宏定义,注意ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS要与Makefile文件里定义的一致,LOCAL_MEM_LOCAL_ADRS和LOCAL_MEM_SIZE要正确。
romInit.s
这是系统上电后运行的第一个程序,根据具体目标板对寄存器和CPU进行设置;以CPU为ARM7TDMI为例,romInit.s 需要进行的工作有:
·保存启动方式:对于冷启动,如果CPU配置的是HIGH VECTORS,就设置入口地址为0xFFFF0000,否则设置入口地址为0x00000000;
·屏蔽中断:通过设置cpsr的I_BIT和F_BIT都为1来实现,还要设置中断寄存器为关模式,同时设定运行模式为SVC32模式;
·初始化堆栈指针pc和sp:堆栈指针sp指向STACK_ADRS,这个宏的定义为当镜像为驻留ROM时,该宏值为_sdata,当镜像为非驻留ROM时该宏值为_romInit,这两个地址经过地址映射后都指向被拷贝镜像在RAM的目标地址;
·初始化cache,屏蔽cache;
·根据具体目标板的需要初始化其他寄存器;
·指针跳转到romStart()函数并执行;
bootConfig.c
一般不需要用户修改,也可以根据具体情况做适当修改;
sysALib.s
与romInit.s文件实现的功能相似,但如果在romInit.s文件里对DRAM和内存控制器进行了初始化在这里不再进行这项工作;
创建VxWorks镜像
根据具体需要在命令行环境下利用Makefile创建各种镜像,也可以在Tornado的集成环境下Build菜单中选择Build Boot ROM来创建各种类型的Boot ROM;
除此以外,如果系统硬件包括串口,还要根据具体情况修改sysSerial.c文件;如果包含网络部分要修改configNet.h;如果包含NVRAM要修改bootnv.h文件。总之,BSP的开发要根据具体目标板的硬件进行。
结语
我们已经利用基于VxWorks的BSP开发包成功的进行了线缆调制解调器的底层软件开发。在开发过程中深感BSP在整个系统软件中的重要性——没有正确的BSP软件,整个系统的启动和运行也不会正确。另外需要强调的是:BSP的概念只是针对嵌入式操作系统而言的,而像DOS、WINDOWS、UNIX等BIOS操作系统是无BSP可言的。对同一目标板而言,不同操作系统的BSP在本质上是一样的,但是不同的操作系统将提供不同的支持库,另外在BSP结构上也可能会有所不同,在做BSP移植的时候应该注意。■
参考文献
1. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 2.0,Edition 1,1999
2. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 1.0.1,Edition 1,1997
3. VxWorks Programmer誷 Guides,Edition 1,1999
此内容为AET网站原创,未经授权禁止转载。