VxworksBSP开发流程Word下载.docx
《VxworksBSP开发流程Word下载.docx》由会员分享,可在线阅读,更多相关《VxworksBSP开发流程Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
rrm1
■
4
r
I1
j
系统硬件平台
i
FLASI燃动程序匚二一」—1Ian驱赫^
i'
FLASH控制器
CPU
SDRAM/ROM
以太网控制器
~I*I*I
从上面的图中,我们可以看到,BSP不是设备驱动程序,因为设备驱动程序可以访问硬
件设备,同时,相同设备的驱动程序可以不作修改的从一个环境移植到另外一个环境当中去,而BSP只能在特定的环境下面运行。
简单地说,BSP开发人员要完成两个方面的工作:
(1)完全支持BSP管理设备
o
(2)通用设备驱动程序的集成工作
3.BSP的组成
BSP包含的程序是提供VxWorks访问目标机硬件环境的主要接口。
BSP主要由下面几类
文件组成。
1.源文件
主要是由C语言编写的代码所组成的文件,也有一小部分由汇编语言编写而成。
2.头文件
包含针对CPU^的硬件定义以及内存定位定义的文件。
3.Makefile文件
控制构造所有类型映象的文件
4.派生文件
由其他文件衍生而成的文件。
BSP的组成文件主要包含在以下四个目录里面:
..\Tornado\target\config\all
..\Tornado\target\config\comps\vxWorks
..\Tornado\target\config\comps\src
bspname
1...\target\config\all目录下的文件
这个目录下的文件作为VxWorks体系结构产品的一部分交给用户.如果不是特殊需要的话,没有必要修改这些文件。
简单的说,config\all下的文件并不是特定BSP的一部分,而
是所有BSP的公共部分。
该目录下主要包含如下几个文件:
(1)bootConfig.c
引导ROhM象的主要初始化和控制文件.
(2)bootInit.C
bootInit.c包含引导RO蜓象第二阶段初始化的代码。
该文件定义了romStart()函数,
romlnit.s中的romInit()函数执行完毕后会跳转到romStart()函数。
该函数执行必要
的代码压缩和ROMS映象的重定位。
(3)dataSegPad.c
它保证了代码段和数据段不会共享一个MMU.
(4)usrCongif.c
包含了VxWorks映象的主要初始化代码。
不同于bootInit.c文件,它是非常完整的。
(5)version.c
提供了VxWorks的版本号、构造映象的日期和时间等信息。
(6)configAll.h
设置了所有VxWorks映象的默认设置。
在这个文件里定义的变量是一些通用的设置,如
果需要的VxWorks映象不同于默认的设置,使用bspname目录下的config.h
文件中定义的宏来替换这里定义的默认宏。
2.bspname目录下的文件
这个子目录包含系统或者硬件相关的BSP文件,主要由下面的一些文件组成。
(1)Readme文件
Readme文件包含了这个BSP的发布记录。
它记录了每次发布版本、修订版本和新版本上面所做的工作。
(2)Makefile和depend.bspnamect件
Makefile文件控制使用命令行方式构造映象。
从VxWorks5.2开始,标准的make工具是GNUmak&
BSPmake系统包含了位于target\h\make目录下的make子文件。
如果某个相关性文件不存在,make将自动产生一个depend.bspnam成件,它可以用来追踪所
有模块的相关性。
⑶Config.h文件
Config.h文件包含了所有头文件和CPU^相关的特殊定义。
标准的config.h包含下面
的内容:
-BSP版本号和修订版本号
-包含configAll.h文件
-高速缓冲存储器和MMU勺配置
•共享内存网络定义
-目标板上的内存地址和大小
-ROMfe址和大小
-非易失性RAM
-默认的引导参数
-时间戳驱动程序支持
-外部总县地址映射
-网络设备和中断向量
-包含bspnameh文件
(4)romInit.s文件
该文件包含引导RO偷基于引导ROM勺VxWorks映象的入口初始化汇编代码。
入口点为
romInit()函数,是系统加电启动后首先执行的代码。
同时它也设置了启动参数类型,并把该参数传递给通用的romStart()函数。
如果硬件需要立即内存映射或者设置特殊
的寄存器,则在这里处理。
一个普遍的错误是BSP的开发人员企图在romInit.s文件中进行过多的初始化操作。
实
际上,大部分其他初始化操作是被推迟到sysHwInit()函数中进行的。
另外,romInit.s
文件中的代码不应当被其它的函数或者模块所调用。
(5)sysALib.s
这个文件包含目标机体系结果所决定的、与系统有关的汇编语言程序。
所有BSP程序应
当用C语言来编写,然而由于编译等原因需要用汇编语言程序编写的时候,可以把所有
汇编语言编写的程序代码放在sysALib.s中。
sysALib.s文件里的sysInit()函数是VxWorks映象的入口点。
系统引导之后,首先执行该段代码。
(6)sysLib.c
这个文件包含目标机体系结构所决定的、与系统有关的C程序。
这些程序提供板极接口,
基于这些板极接口,VxWorks和应用程序的构造和系统无关。
sysLib.c文件中包含了对
驱动程序的安装和初始化工作,这些工作具体在一些子文件中实现,比如sysSerial.c、
sysScsi.c、sysNet.c等。
使用子文件的目的是为了保持设备驱动程序的安装和初始化不随结构的变化而改变。
(7)sysSerial.c
SIO设备串行I/O设备驱动程序的安装和初始化
(8)sysScsi.c
包含SCSI-2设备驱动程序的安装和初始化
(9)sysNet.c
网络接口程序的安装和初始化
(10)bspnameh
与目标板有关的特殊信息的定义
(11)target.nr
这个文件了运行VxWorks必须需要的目标板特殊信息
(12)configNet.h
网络配置头文件。
主要包含END^J络设备驱动程序的配置。
3...\target\config\comps\vxWorks目录下的文件
VxWorks实时内核基本模块描述文件.
4...\target\config\comps\src目录下的文件
VxWorks实时内核基本模块配置文件.
4.BSP开发
下面对BSP的开发做一下宏观上面的描述:
(1)BSP的开发步骤应当是一个逐步增加应用的过程
(2)开发过程中的软、硬件支持(ICE、BMD
(3)开发效率的提高
(4)BSP的调试方法
-黑调试法
利用亮灯、示波器等手段。
5.Tornado目录结构
Tornado开发系统包含三个高度集成的部分:
-运行在宿主机和目标机上功能强大的交叉开发工具和实用程序
•运行在目标机上的高性能、可裁剪的实时操作系统VxWorks
•连接宿主机和目标机的连接方式,如以太网、串口线、ICE、ROM^真器等
Tornado下的主要目录如下:
留在主机的
工具
.共享代码
I(jriiaclost*<
>
re
VxWsks板支持包
Host目录树
Tornado工具的头文件
liosl
tLibm^i!
resource
—telmati
^rc
主机相关工具
Tbgd□与GNU可执行文件
Tbmad□工具的库文件
GNU参考手册
GNUTTCLPHelp支持文件
TCL标准发行版
关于Tomadol具的UNIX草考
手册
示例源程序
VxU初底的配置生成文件
逋用配置文件
板支持包
\xWorks头文件
\xW01-ks51供的库文件
Target目录树
厂为血
_all
hsjiVaav
一h
target_„b
一man
VxWorks映象及启动顺序
最小的初始化处理是由防在目标机内存特殊位置的一部分代码和可能的一些表(中断描
述表、全局描述表)组成。
当目标机复位或者加电以后,处理器总是跳转到这个位置。
这部分代码初始化机器到某一个指定的状态上、初始化内存和内存地址、关中断,然后把控制权
交给附加引导代码。
VxWorks映象类型
系统把VxWorks映象的类型分成三种,各类型的影响内部又包含不同的子类型。
1.可加载(Loadable)的映象类型
可加载型映象的执行需要通过引导代码把它装载到目标机RA"
然后才开始执行。
而
引导代码分为两中:
•引导代码固化在ROhMFLASH中
•引导代码是一个独立的VxWorks应用
引导代码通常也是一种VxWorks映象,有时候称之为引导映象。
它的设计目的就是把另
一个包含应用的VxWorks映象装入到RAM中。
弓I导映象在运行时,可能在ROM/FLASH中执行,也可能在RAM43执行。
2.基于ROM(ROM-based的映象类型
基于RO阀映象在执行前首先把自己从ROhM者FLASH中装载到RA"
。
这种类型的映
象通常在启动阶段会比较慢,但是执行阶段比较快。
3.ROM主留(ROM-Resident)的映象类型
ROM主留型映象在启动的时候,把数据段拷贝到目标机RAMK这种类型的映象通常在
启动的时候会比较快,当目标机的RAMS间比较小的时候,通常使用这种映象。
在嵌入
式应用中通常使用这种类型的映象,然而它在目标机上的执行速度要比其它类型的映象
要慢。
VxWorks映象启动顺序
在目标机加电启动时发生的顺序启动事件是一个典型VxWorks映象需要执行的功能。
所
有类型的VxWorks映象在初始化阶段启动顺序是一样的,处理器通过”Jump’跳转指令跳
转到RO贼者Flash中引导代码的入口处,这段引导代码通常包含如下的操作:
-关中断
-初始化目标机内存
•装载适当的VxWorks映象段
-跳转到设置目标机为静止状态的代码处
1.可加载型VxWorks映象引导顺序
I3coiSriii|iProj^rariis
ROM
R,\M
KAMI<
JWAl
VkWorkt
F.FkEL-RAMAIKS
5A'
I?
、
Krinfrn
可加载型VxWorks映象引导的详细过程如下:
(1)数据段和代码段的装入。
系统加电后执行引导带代码,首先把引导代码的代码段和数据段从RO贼者FLASH里装到RA"
此时,需要考虑下面的情况:
-压缩型引导代码。
这种类型的引导代码在拷贝的时候,要对其进行解压操作。
-非压缩型引导代码。
这种类型的引导代码直接进行拷贝操作就可以了。
-驻留型引导代码。
这种类型的引导代码只拷贝它的数据段就可以了。
(2)VxWorks映象的装入。
弓I导代码执行后,把VxWorks映象装入到RAM中,然后跳转到VxWorks映象装入点。
(3)系统初始化。
这步操作由静态链接在VxWorks映象里的系统初始化代码来完成,最终完成系统的初始化操作。
2.基于ROM勺VxWorks映象启动顺序
引导带程序
一-
—
VxWorks映象
基于ROM的
基于ROM勺VxWorks映象启动详细过程如下:
(1)VxWorks映象的装入。
系统加电后引导代码的执行,首先将VxWorks映象从ROM
或者FLASH里装入到RAMK
(2)控制权转移。
VxWorks映象被装入之后,系统控制权交给VxWorks映象中的系
统初始化代码部分
静态链接在VxWorks中的系统初始化代码在RAM1执行,完成系统初始化操作
3.ROM主留型VxWorks映象启动顺序
基于ROM主留型的VxWorks映象启动详细过程如下:
系统加电后引导代码的执行,首先将VxWorks映象的数据段从RO贼者FLASH里装入到RAMK
VxWorks映象被装入RA咱后,系统控制权交给ROM/Flahs里的VxWorks映象中的系统初始化代码部分
静态链接在VxWorks中的系统初始化代码执行,完成系统初始化
操作
8.Bootrom_uncmp
9.Bootrom_res
VxWorks预内核初始化
预内核初始化主要是指CPU的初始化、向量表的安装、全局描述表的安装、目标机上硬件设备的初始化、操作系统初始化等操作。
1.预内核初始化概述
(1)下载型VxWorks映象预内核的初始化顺序
目标机系统加电后,首先执行VxWorks引导程序,由引导程序把VxWorks映象装载到目标机RA"
当把VxWorks映象装入到RAMfe后,处理器跳转到映象装入地址处。
接下来首
先执行sysInit()函数,然后执行usrInit函数,由usrInit()函数彻底完成整个预内核的
初始化。
加电:
执行VxWorksI引导映象装载
WWorksrdi象
usrfniti)
(2)ROM®
VxWorks映象预内核的初始化顺序
目标系统加电后,首先执行romInit()函数,其功能是对CPU进行初始化,然后执行
romStart()函数进行映象段的拷贝和解压缩工作,然后执行usrInit函数,由usrInit()函
数彻底完成整个预内核的初始化。
「电:
装哉映象段到
ronilnn()
r^niSlarif1
》sysHwTniiO
)kemcllnit(I
2.预内核的特殊初始化函数
VxWorks映象里的特殊函数如下:
-romInit()函数
-romStart()函数
-sysInit()函数
romInit()函数和romStart函数是所有固化在ROM/Flash里的VxWorks映象(ROM型VxWorks映象)所必须执行的函数,而sysInit()函数仅仅只是所有装载型VxWorks映象执行的函数。
1.romInit()函数
(1)romInit()函数功能简述
romInit()函数包含在romInit.s文件中,且用汇编语言编写。
它是系统加电后首先执
行的代码,也是所有ROM®
VxWorks映象入口点。
它执行目标机最小的初始化操作及调用romStart()函数。
romInit()函数必须包含下面的功能:
-屏蔽处理器中断和处理器复位
-初始化系统内存
•初始化堆栈指针和其他寄存器,开始执行romStart()函数及传递启动参数
(2)冷启动和热启动
冷启动是指硬件环境通过加电启动。
在romInit()函数中需要保存系统启动类型,启动
类型的宏定义为BOOT_COLD
热启动是指通过调用reboot(),Ctrl+X或者异常中断等重新启动目标机系统的方式。
2.romStart()函数
romStart()函数是所有固化在ROM/Flash里VxWorks映象第一个执行的C语言函数。
(1)romStart()函数的功能描述
romStart()函数包含在../all/bootInit.c文件中,并且用C语言编写成。
它是系统最
先执行的一个C语言程序,为RO眼象执行必要的代码重定位、解压缩和RAMe始化操作,
具体如下:
•拷贝适当的ROM映象段到RAM户
-清理没有被使用的那部分内存
-执行解压缩操作(如果有必要)
•调用预内核的通用初始化程序usrInit()
(2)romStart()的修改
在BSP的开发过程中,可能需要修改bootInit.c文件。
这个文件是BSP的一个公用文
件,所以对于该文件的修改,情况比较特殊,具体步骤如下:
-拷贝bootInit.c文件。
bootInit.c文件是一个公用文件,所以不可以直接修改..config/all目录下的bootInit.c文件,而是应该把该文件拷贝到某个BSP目录下,然
后修改这个BSP目录下的bootInit.c文件。
•修改makefile文件。
为了链接拷贝的bootInit.c文件,而不是原始的文件,需要修改
BSP目录下的makefile文件。
在HEX_FLAGST定义后面增加一行:
BOOTINIT=bootInit.c
在构造VxWorks映象的控制文件rules.bsp文件中,系统通过使用BOOTINIT宏定义来访问
bootInit.c文件。
这个宏定义的默认的访问的值是../config/all/bootInit.c文件。
(3)romStart()配置宏定义
(4)ROW日RAM勺布局
ROM布用
ROMBASEADRS-ROMSIZE
r
压缩型映象区域
binA11ayEnd
binArraySian
非压缩型映象区
域
ROM_TEXT_ADR5
RDMBASF.A[)RS
RAM布局
Z
用尸保留区域
/
冷启动时填充0
ROM型映象重:
新定位区域
f
保留堆栈区
f
用户保留区域
sy7sPhysMemtop0
SYS_MEMJIVP
R.4M_DST_ADRS
SYS_MEM_EOFrOM
LOCALMEXfLOCALASRS
3.sysInit()函数
(1)sysInit()函数功能描述
sysInit()函数是装载型VxWorks映象的入口点。
当映象被装载到RA"
以后,处理器
将跳转到sysInit()函数处执行。
该函数原形在sysAlib.s中,是用汇编语言编写成的。
sysInit()函数驻留在装载型VxWorks映象的装载地址处。
它
执行必须的最小初始化操作以及调用usrInit()函数,而硬件初始化推退到预内核通用初始
化代码中进行。
(2)sysInit()代码的获得
sysInit()函数的代码可以通过修改romInit()函数的代码获得,仅仅需要修改一些便
可以得到sysInit(0函数代码:
-删除内存初始化代码
•把调用romStart()函数改为调用usrInit()函数
-sysInit()函数在RA"
执行,所以不需要设计成与地址无关的代码
(3)RAMf?
局
RAM布局〜,*
z<
sysPhysMemTop()
RAMJ^OW^DRS
最初的堆枝--
LOCALMEMLOCALADRS
3.预内核的通用初始化代码
1.通用初始化代码概述
(1)通用初始化代码的职责
•通用初始化代码必须为VxWorks内核提供一个环境,以便激活VxWorks内核
-内核代码执行后,初始化系统需要的系统内存空间或者多任务环境
(2)通用初始化
预内核的通用初始化操作是通过usrInit()进行的,该函数是用C语言编写的。
其原型
函数包含在usrConfig.c文件中。
当构造VxWorks文件的时候,它被静态链接到映象中。
系
统调用该函数也就激活了VxWorks内核。
而初始化硬件的操作,主要是通过调用sysHwInit()函数来实现的,该函数主要包含主
要功能如下:
-屏蔽所有硬件设备的中断
-初始化硬件设备到可知的静止状态
BSP的配置
用户在开发自己的目标机BSP之前,必须了解在VxWorks操作系统下BSP的配置,只有
在熟悉BSP的配置之后才可以正确对BSP进行移植和修改工作,并根据自己的需要成功的配置一个BSR
1.BSP的基本配置
(1)RO廊RAIW局
用户可以根据目标机的具体情况对RO昉日RAM勺空间布局进行配置,配置过程主要是通
过修改地址宏定义的值而达到的,在config.h文件中定义了这些宏。
在修改这些宏的时候,
需要注意的是,同时也将makefile文件中定义的宏做对应的修改。
(2)内存配置
内存配置包括用户驻留程序的内存基地址、局部总线内存基地址、内存基地址以及内存
大小等。
(3)启动设备及参数配置
启动设备及参数配置主要包含引导参数的配置,即从哪里下载VxWorks映象、系统热启
动之后从什么设备上启动系统以及设备相关的其它参数的配置:
•默认引导参数配置
-热启动设备和参数配置
(4)外围设备驱动程序及相关参数的配置
•配置TrueFFS驱动程序
-配置软盘驱动程序
-并行端口驱动程序-时钟配置•浮点处理支持-硬盘配置-串口配置
(5)文件系统配置
(6)网络驱动程序配置
(7)高级缓存配置
(8)堆栈配置
2.VxWorks的基本配置
(1)内核软件的配置
(2)内核软件工具的配置
(3)内核软件扩展工具的配置
VxWorksT设备驱动程序概述
VxWorks下的设备驱动程序在设计上继承了常规驱动程序的设计,同时也包含了自己的
独到之处。
VxWorks下的设备驱动程序都以模块为单位、各个模块之间功能明确、接口