×
嵌入式 > 嵌入式开发 > 详情

基于VxWorks的BSP概念与开发

发布时间:2020-05-21 发布时间:
|
摘 要:本文以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

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
SD卡接口的完整规范(二)