新闻  |   论坛  |   博客  |   在线研讨会
怎样理解BSP
yanqin | 2009-04-17 12:41:09    阅读:1313   发布文章
第二节 怎样理解BSP

分析BSP可以从两个角度出发:
1. BSP在宿主机上由什麽函数和文件组成,以及目录情况
2. BSP在目标机上是以什麽逻辑执行的
第二章 BSP的函数与文件
第一节 BSP的文件构成
VxWorks的BSP组成文件主要包含在四个目录下:
Tornado\target\config\all :所有BSP的公共部分
Tornado\target\config\comps\vxworks :基本模块描述文件(*.cdf)
Tornado\target\config\comps\src :模块配置文件(被usrConfig.c使用)
Tornado\target\config\bspname :与目标板相关的部分
下面分别介绍这两个目录下的文件:

1. config\all:在该目录下主要有如下几个文件
bootConfig.c :是所有Boot Rom的主要初始化与控制文件。BootConfig.c是usrConfig.c的一个子集,所以Boot Image只能提供完整VxWorks Image中的部分功能。Boot Image不使用MMU库(SPARC除外)。在集成环境下修改工程相关的配置信息不会影响Boot Image,只有直接修改config.h,configAll.h,bootConfig.c和bootInit.c文件才会影响到Boot Image;
bootInit.c:定义了romStart()函数,用于Boot Rom的第二阶段初始化。首先把text和data段从ROM拷到RAM中,然后初始化部分RAM,进行解压;
usrConfig.c:包含VxWorks Image的主要初始化代码。使用命令行编译时才会用到此文件;
2. config\bspname:在该目录下主要有如下几个文件
makefile: 用于命令行下编译。其中定义了一些宏,如:ROM_TEXT_ADRS,ROM_WARM_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS;
config.h:包含所有的头文件和与CPU相关的宏定义,如:对Cache和MMU的配置,RAM和ROM的定位以及大小配置,外部总线地址映射,PCI地址宏; 25
romInit.s:该文件包含Boot Rom和Rom-based VxWorks Image的初始化入口汇编代码,即实现了romInit()。目标板一上电就开始执行romInit(),主要完成三部分工作:
(1) 屏蔽中断,初始化CPU;
(2) 配置内存系统,通常包括关闭cache,初始化内存控制器;
(3) 初始化堆栈指针和其它寄存器以执行C语言,然后调用romStart().

Note:romInit()函数必须设计成与内存地址无关的代码(PIC),romInit.s只执行一些必要的初始化,其余的初始化工作可放到sysHwInit()中实现。
sysALib.s:包含目标板或系统相关的汇编语言函数,即实现了_sysInit()。这是Boot Rom起来以后执行的第一段代码,sysALib.s类似于romInit.s完成的工作,但它不必设计成PIC,且可调用其它库中的函数。
sysLib.c:包含目标板或系统相关的C语言函数,该文件提供板级接口,通过该接口,VxWorks和应用程序的实现与目标系统无关,sysLib.c包含src\drv目录下的驱动程序子文件,驱动程序的安装和初始化在子文件中完成。
sysSerial.c:串口驱动程序的安装和初始化。
sysNet.c:网络接口设备的安装和初始化。
bspname.h:包含与板子相关的宏定义。若要把src\drv下的某驱动程序移植到目标板上,必须在bspname.h文件开始包含目录target\h\drv下该驱动程序相对应的头文件。
bspname.h应该定义:中断向量或中断号;I/O设备地址;设备寄存器位的含义定义;系统时钟和辅助时钟最大和最小时钟速率。
第二节 BSP的函数构成

sysLib.c中应该实现一下几类函数:
1.系统时钟中断相关的函数:sysClkConnect(),sysClkDisable(),sysClkEnable(),
sysClkInt(),sysClkRateGet(),sysClkRateSet();
2.系统硬件初始化函数:sysHwInit(),sysHwInit2()
3.内存相关的函数:sysMemTop(),sysNvRamGet(),sysNvRamSet()
4.串口相关的函数:sysSerialHwInit(),sysSerialHwInit2(),sysSerialChanGet()
5.杂项函数:sysBspRev(),sysModel(),sysToMonitor()
6.其它可选函数:如:辅助时钟中断相关函数,总线相关函数


参与讨论
登录后参与讨论
推荐文章
最近访客