BSP知识概述.docx
- 文档编号:14901577
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:42
- 大小:678.40KB
BSP知识概述.docx
《BSP知识概述.docx》由会员分享,可在线阅读,更多相关《BSP知识概述.docx(42页珍藏版)》请在冰点文库上搜索。
BSP知识概述
BSP概述
1BSP定义
BSP即BoardSupportPackage,板级支持包。
BSP(boardsupportpackage),是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行与硬件主板。
在嵌入式体统软件的组成中,就有BSP。
BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU
来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。
这样才能与上层OS保持正确的接口,良好的支持上层OS。
BSP是针对某个特定的单板而设计的。
如果没有单板支持软件包,则操作系统就不能在单板上运行。
并且它对于用户(指开发者)也是开放的,用户可以根据不同的硬件需求对其作改动或二次开发。
BSP在嵌入式系统中的角色,很相似于在PC系统中的BIOS和驱动程序的地位。
但对于嵌入式系统来说,它没有像PC机那样具有广泛使用的各种工业标准、统一的硬件结构。
各种嵌入式系统各不同的应用需求就决定了它一般都选用各自定制的硬件环境,每种嵌入式系统从核心的处理器到外部芯片在硬件结构上都有很大的不同。
这种诸多变化的硬件环境就决定了无法完全由操作系统来实现上层软件与底层硬件之间的无关性。
BSP软件与其他软件的最大区别在于BSP软件有一整套模板和格式,开发人员必须严格遵守,不允许任意发挥。
在BSP软件中,绝大部分文件的文件名和所要完成的功能都是固定的。
所以,BSP软件的开发一般来说都是在一个基本成型的BSP软件上进行修改,以适应不同单板的需求。
针对某类CPU的硬件单板,嵌入式操作系统(如vxWorks)通常提供有其DEMO板的BSP,这些程序位于指定的目录之下。
也就是我们所说的最小系统BSP。
一般来说,我们在硬件系统设计好之后,都会先找到一个与自己系统相近的DEMO板BSP(最起码是使用相同的CPU)。
并以此为基础,开发自己单板的BSP。
BSP在软件系统中的位置可以用下图来表示,BSP为操作系统和硬件设备的互操作建了一个桥梁,操作系统通过BSP来完成对指定硬件的配置和管理。
)
BSP向上层提供的接口有
与操作系统内核的接口(如报告DRAM大小、修改中断屏蔽级别等)
与操作系统的I/O系统的接口
与应用程序的接口
BSP的主要功能
BSP的主要功能在于配置系统硬件使其工作于正常的状态,完成硬件与软件之间的数据交互,为OS及上层应用程序提供一个与硬件无关的软件平台。
因此从执行角度来说,其可以分为两大部分:
&
1)目标板启动时的硬件初始化及多任务环境的初始化
2)目标板上控制各个硬件设备正常运行的设备驱动程序,由它来完成硬件与软件之间的信息交互
通常我们认为BSP是为OS服务的,但实际上,BSP软件包中的部分程序对OS也并不是必须的,从这个角度,又可以将BSP划分为两部分:
1)最小系统BSP,即我们通常所称的BSP
2)设备驱动程序
2BSP实际开发的主要过程
1.掌握开发中使用的操作系统,和在这种操作系统下开发BSP的要求。
2.:
3.研读所选CPU的资料。
4.研读硬件设计文挡。
5.
6.研读电路板中器件的资料。
7.找一个BSP模板,熟悉它并在此基础上开发自己的BSP。
从头研制BSP工作量极大,也没有必要。
8.利用仿真器进行调试,开发最小BSP系统。
9.在最小BSP的基础上,利用Tornado集成开发环境,进一步调试外围设备,配置、完善系统。
10.调试单板上的设备驱动程序。
3?
4BSP的调试方法(最小系统的调试和设备驱动程序的调试)
4.1仿真器调试方式:
在串口和网口初始化及发挥功能以前,用仿真器调试是一种相对来讲很方便的手段。
BSP软件的调试通常需要利用仿真器来进行。
目前市场上的大多数仿真器都能支持JTAG接口。
典型的仿真器调试环境如下图所示:
调试计算机通过RS232接口与仿真器相连,完成对仿真器的初始化配置工作,通常这项工作只在第一次使用仿真器时进行,配置结果一般会被仿真器存储起来。
仿真器通过以太网口与调试计算机相连,通过JTAG接口与目标板相连,利用这条通路,仿真器就可将计算机上的程序下载到目标板上进行调试。
目前常用的有两类仿真器,一是JTAG仿真器,二是全功能在线仿真器。
前者是利用处理器中的调试模块的功能,通过其JTAG边界扫描口来与仿真器连接。
这种方式的仿真器比较便宜,连接比较方便。
但由于仅通过十几条线来调试,因而功能有局限。
对于全功能在线仿真器来说,由于其仿真头完全取代目标板上的CPU,因而功能非常强大。
这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。
4.2…
4.3“黑”调
在没有仿真器的情况下一般使用“黑”调,具体的方法是加“指示灯”、用示波器测量硬件信号等,目的是打通串口,达到宿主机与目标机的通信。
这种调试方法无法跟踪软件的运行这种调试方法要求所使用的BSP模板与自己的单板基本一致。
“黑”调的工程步骤:
BSP完成
4.4
使用集成开发环境
在进行VxWorks下BSP开发时,如果最小系统的BSP已经能够正常运行,则可以使用VxWorks的集成开发环境Tornado。
TornadoII工具提供一个高度可视化和自动化的开发环境,加快了基于VxWorks的应用开发。
这样,不论对于初次使用还是有经验的开发者,使用TornadoII开发其应用是快速而方便的。
?
5
中断处理
5.1采用中断处理方式的原因:
保证处理的实时性、减少CPU的消耗。
5.2中断的处理流程
中断处理程序首先切换到中断堆栈,保存程序计数器和寄存器等中断现场状态,然后对中断进行处理,中断处理过程中必须要及时清除中断源,最后要恢复中断前的程序计数器和寄存器等现场状态,由中断处理程序返回。
/
InterruptServiceCode
实时系统中的中断处理非常重要,系统通常通过中断获取外部事件。
为了尽可能块的响应中断,VxWorks中的ISRs运行在特定的上下文(非任务上下文),中断处理无需任务的上下文切换。
我们可以使用除了VxWorks系统使用的之外的系统硬件中断,VxWorks提供了例程intConnect()用于将C程序与任何中断相连接。
VxWorks的ISRs运行在特定的上下文(x86中断使用当前被中断掉的任务的堆栈,PPC有单独的全局中断堆栈)因而中断处理没有任务的上下文切换。
5.3中断的堆栈
大部分系统规定(如PowerPC):
所有的中断使用同一个专用堆栈,这个堆栈在系统启动时根据特定的配置参数由系统来分配和初始化。
要求堆栈足够大来处理最坏的中断嵌套。
然而有一些系统不允许有单独的中断堆栈(如x86),在这种情况下,中断使用当前被中断掉的任务的堆栈。
如果使用这种结构,必须给每个任务开足够大的任务堆栈来处理最坏的中断嵌套和调用嵌套。
<
可以在开发中使用checkStack()来查看在栈空间中任务和中断的堆栈是如何分布的。
5.4ISR的一些限制
1、ISR要尽量的短,能在任务中完成的工作就不要放在ISR中。
2、ISR不能调用将会导致阻塞的子程序。
3、ISR不能take信号量,但是ISR可以give信号量。
4、由于子程序malloc()、free()使用了信号量,ISR不能调用它们。
5、ISR不能通过VxWorks的驱动执行I/O。
6、
7、《
8、ISR不能调用使用了浮点协处理器的子程序。
5.5中断服务程序与任务的通信
由于中断事件通常涉及到任务级代码,因此必须提供中断服务程序和一般任务的通信机制。
VxWorks提供的中断服务程序和一般任务的通讯机制有:
共享存储区和环形缓冲
信号量:
中断服务程序能够释放信号量(不包括互斥信号量和VxMP共享信号量),任务能够等待该信号量。
消息队列,中断服务程序能够向消息队列发送消息,任务能够从消息队列里接收消息。
管道:
中断服务程序可以向管道写数据,任务可以从管道读取数据。
信号灯:
中断服务程序能够通过发信号通知任务,触发相应的信号处理程序的异步调度。
6^
7
8常用总线协议:
HDLC、UART、Ethernet/IEEEATM、PCI、I2C、SPI
9单板的硬件组成
BSP与单板密切相关,要开发BSP就要了解单板的硬件组成,单板一般由CPU最小系统和一些外围硬件设备构成。
CPU最小系统:
CPU、内存、内存控制器、调试串口、调试网口、系统时钟、桥片、外围芯片(包括)、实时时钟、定时器、FPGA、部分嵌入式系统也包括软硬盘控制器、显卡、键盘。
不同单板使用不同的专用设备芯片:
。
DMA控制器、E1传输芯片、光接口芯片、时隙交换、FLASH、host/pci桥片pci/pci桥片、以太网口芯片(如intel的82559、realtek的8139)、以太网口交换芯片(BCM5616)、CSM5000、CSM5500、看门狗、专用FPGA逻辑等等。
典型的单板组成示意图:
IS95/1X中的SVICM单板组成示意图
3G系统中的CPU最小系统结构示意
3G系统中的CCM单板结构示意
-
10处理器:
我们目前经常使用的处理器:
POWERPC、ARM、MIPS、x86等系列处理器
POWERPC:
Mpc860、Mpc8260、Mpc850、Mpc8250、Mpc755、Mpc8245、Mpc7450、IBM750
ARM:
IXP1200、IXC1100
X86:
(PIII处理器)
各处理器的特点(见硬件相关文档):
嵌入式系统使用的CPU一般具有低功耗、体积小、集成度高等特点,而且一般内部集成了内存控制器、串口控制器、以太网口控制器等芯片。
【
例如:
MPC8260POWERQUICCⅡ是一个功能强大的嵌入式通讯处理器,它集成了一个64-bit高性能的PowerPC系列的RISC微处理器和一个32-bit的RISC通讯处理器。
同MPC860一样,MPC8260由三个主要功能块组成,但它具有更强大的功能:
一个64-bit的内核,是PowerPCMPC603e微处理器的变种。
它的处理速度可达100~200MHz,并支持L2cache。
一个系统接口单元(SIU)。
它具有一个更加灵活的存储器控制器,可以与几乎所有类型的存储器接口。
并支持JTAG控制器IEEE测试端口(TAP)。
一个通信处理模块。
它不仅包含了MPC860上的所用通信外围控制器,还增加了三个高性能通信通道(FCC)支持新的高速协议,两个多通道控制器(MCC)可支持128个串行全双工通道。
·
11
BSP提供的vxWorks下的设备驱动
BSP的另一项主要任务是为操作系统访问硬件设备驱动程序提供支持。
所谓设备是指独立于处理器内核之外的,能够接收CPU的输入数据和/或向CPU提供数据输出的硬件单元。
11.1网口、串口的设备驱动
对于一些通用的设备,如网口、串口,由于包含在BSP最小系统内,vxWorks都会提供基本的驱动程序。
常用的串口设备驱动程序参见目录\tornado\target\src\drv\sio,网口设备驱动程序参见目录\tornado\target\src\drv\end。
这些驱动程序仅与设备本身的硬件特性密切相关,如配置一些必须的设备控制寄存器,中断寄存器,初始化设备驱动结构等。
具体的这些寄存器,驱动结构的值是什么,这些与用户的实际应用密切相关的信息放在各单板BSP目录下的文件中,如串口配置源文件(定义了用作串口的UART设备的基地址,寄存器数据位数,使用的缺省波特率,晶振频率等),网口配置源文件(定义了82559网口芯片的PCI基地址,EEPROM中的MAC地址等)。
大多数应用只需要修改中的配置参数就可以了。
(
VxWorks已经为网口和串口设备驱动提供了标准的库函数,用于将与硬件相关的设备驱动加载到硬件无关的I/O层,使得应用层不必关心具体的硬件驱动实现,直接调用统一的Socket接口函数或I/O接口函数就可以正常的收发数据,执行查询、控制操作。
由vxWorks或设备供应商提供的网口,串口驱动已经包含了较为完备的设备驱动接口,完成设备的初始化、数据收发,中断服务程序连接与中断使能。
实际应用时,做相应的修改就可以了。
详细步骤可以参见相关的最小系统详细设计文档。
11.2一般硬件的设备驱动
一般硬件是指除BSP最小系统之外的各应用使用的硬件设备。
这些设备的供应商可能不会提供专用的设备驱动程序,或是提供的设备驱动程序无法满足实际应用的需要。
因此,必须由BSP开发人员编写相应的设备驱动程序,为操作系统访问硬件设备驱动程序提供支持。
BSP提供的设备驱动接口大致有以下几类:
11.2.1
11.2.2设备初始化接口
所有的设备驱动程序都应该提供设备初始化接口。
该接口实现主要包含以下内容:
(
1、保存应用程序传入的正常回调函数指针。
该回调函数在设备正常的收发中断中调用,用于向操作系统的驱动任务传递收发事件消息,触发驱动任务开始收发数据,使得系统尽快退出中断,真正的数据收发都在驱动任务中完成,接受OSS的调度,提高CPU的利用率。
对于没有收发事件的设备,如Plx9030、Bcm5616,就无需这个函数指针。
2、保存应用程序传入的异常回调函数指针。
设备出现异常状况通常也会引起中断,在异常中断中调用异常回调函数,将设备出错信息传给OSS的实时控制进程,由该进程对设备的异常情况进行处理,有必要的话,可以报告给后台告警。
通常一个实时控制进程负责监控单板上所有设备的异常状况,因此应对给设备的异常状况统一编码,实时控制进程根据不同的告警码来判断何种设备出现了异常。
3、进行必要的硬件初始化。
4、使用系统函数intConnect()将设备中断服务程序连接到中断向量表中。
1、使用系统函数intEnable()使能设备连接的CPU中断。
对于具有数据收发功能的设备,如UART、HDLC,应提供数据收、发接口。
11.2.3-
11.2.4设备发送数据接口
设备发送数据接口用于将上层应用的数据输出到设备,再由设备输出。
该接口的入参应包括待输出用户数据缓存的指针,数据长度。
11.2.5设备接收数据接口
设备接收数据接口用于将设备接收到的数据传递给上层应用。
该接口的入参应包括用于接收数据的用户缓存的指针,用户缓存的长度。
输出参数包括实际接受到的数据长度。
11.2.6设备控制接口
上层应用调用设备控制接口完成对设备的设置和查询。
如可以调用UART的控制接口查询或重新设置波特率,查询发送、接收缓存是否为空等。
该接口的入参应包括查询码,用于区分不同的操作。
对于查询操作,输出参数为查询的结果,对于控制操作,入参还应包括相应的设置参数。
11.2.7
11.2.8…
11.2.9中断服务程序
中断服务程序属于BSP的内部接口,在设备初始化时被连接到中断向量表中。
当CPU检查该中断时,就会根据中断向量表中填写的中断服务程序指针调用该函数,完成相应的操作。
在实时应用中,中断服务程序应当尽可能的简短。
其主要任务就是检查产生中断的原因,根据不同的中断原因调用相应的回调函数,通知相应的任务去处理中断事件。
11.3BSP同其他软件的关系
BSP同硬件和上层软件系统的关系,以及BSP内部模块之间的关系图示如下:
@
12以太网口驱动
以太网口驱动采用标准的END接口。
vxWorks里如何使用ENDnetwork:
;
vxWorks里使用两种类型的网络设备驱动,一种是networkdrivers,它和IP协议结合紧密,使用不灵活;另一种就是SENS(scalableenhancednetworkstack),它在硬件driver和协议driver之间插入了MUX这一层功能实体,如图:
这样,高层协议和底层驱动间就可灵活配置,MUX的作用如下图:
既然MUX介于这二层之间,它就需要和这二层打交道,它提供了一个结构体来作这方面的工作:
XX_DRV_CTRL,它又包含了几个结构。
下面我们看这几个结构:
END_OBJ:
END对象结构,它是XX_DRV_CTRL结构的基类
DEV_OBJ:
包含了设备的具体信息;
[
NET_FUNCS:
包含设备驱动函数的指针
NET_PROTOCOL:
设备同上层协议的接口;
这些结构的关系如图所示:
利用MUX层提供的函数来创建这些结构,(vxworks里使用END,必须执行下面的三个函数)叙述如下:
/
muxDevLoad():
loadingaDeviceintotheMUX;它实际是调用了底层driver的xxload(),它返回END_OBJ,并填充了DEV_OBJ和NET_FUNCS;
muxDevStart():
startingadriver;它调用了NET_FUNCS的(*start)(…);主要是连接ISR(xxInt)和启动设备;
muxBind():
将上层的protocoldriver绑定到MUX上;创建NET_PROTOCOL结构;此函数最关键的是指明了MUX层在收到网络包时,调用上层协议的哪个函数。
(函数的使用参见ref手册)
我们看三层协议间的函数调用关系:
在接收数据包时,整个过程如图:
设备产生中断,执行xxInt(),中断服务程序调用netjobAdd()将xxReceive挂到ostNetTask队列中执行,xxReceive()调用muxReceive(),后者再调用protocol里的接收函数,象上面提到的EpStackRcv.
发送包时如图:
】
VxWorksBSP的目录结构:
BSP文件主要位于Tornado安装之后的Target目录下,具体目录结构如下:
;
•config目录:
用于vxWorks核心的配置及编译的文件。
其中又包含多个子目录。
all目录:
通用的配置文件
comps目录:
用于Tornado工程管理工具配置的源文件
`
bspname目录:
每个单板都有一个相应目录,命名可根据单板而定,其中包含有关此单板BSP的代码文件,目标文件及编译文件等,这也就是我们通常所说的单板BSP。
•h目录:
其中包含所有vxWorks操作系统的头文件及通用编译文件。
其中的各个子目录表示了vxWorks中不同模块的头文件。
•
lib目录:
由vxWorks为不同平台提供的库文件及目标文件。
•src目录:
vxWorks提供的部分硬件芯片驱动程序的源代码文件,其又包含多个子目录:
{
config目录:
有关vxWorks操作系统的一些通用的源代码文件。
drv目录:
vxWorks中一些硬件芯片的通用驱动程序源代码文件,其根据不同功能的芯片分为若干个子目录,例如end 表示网口驱动,sio表示串口驱动等
•unsupported目录:
其中包含一些较古老的硬件BSP代码。
3三种不同的VxWorks映象比较
理解VxWorks映象是开发VxWorksBSP的基础。
《
VxWorks映象通常由三个部分组成:
BSP、操作系统内核和上层应用。
从文件的组织形式上可以将映象分为三段:
BSS段、Data段和Text段。
其中,BSS段存放的是未初始化的全局变量或静态变量,Data段存放的是已经初始化的全局变量或静态变量,Text段存放的是可执行的代码。
根据应用场合的不同,VxWorks映象可分为三类:
Loadableimages
Rom-basedimages
Rom-residentimages
其中,Loadableimages通过烧写在ROM中的Bootrom装载到RAM中来启动;Rom-basedimages使用自身带的启动代码把自己装载到RAM中来启动;而Rom-residentimages在ROM中启动,只是把需要动态修改的Data段和BSS段装载到RAM中去。
12.1可加载的VxWorks映象
,
这是一种运行于RAM的VxWorks映象。
它不包含搬移程序,需要借助于一些外部的程序如bootRom才能加载到RAM的低端RAM_LOW_ADRS地址处。
这是缺省的开发映象。
在开发的初期阶段,用户可以根据需要添加或删除一些VxWorks组件,生成自己的可加载的VxWorks映象,存放在开发主机的某个目录下。
目标板上电后,由烧结在BOOT中的起始引导程序(BootStrapPrograms)将BOOT中的ROM引导程序(ROMBootPrograms)拷贝到RAM的高端地址RAM_HIGH_ADRS处,并跳转至该地址执行ROM引导程序,配置好所选的加载方式(缺省为网络方式),将指定的主机目录下的可加载的VxWorks映象下载到目标板的RAM地址RAM_LOW_ADRS处,并跳转到此处执行。
如图1所示。
*
@
【
这种映象的优点是生成的VxWorks映象可以存放在开发主机PC机上,不用烧到BOOT中,节省了BOOT容量,也便于随时修改不同的VxWorks映象,适用于调试的初期阶段。
不足之处是需要在主机上维护一个正确的VxWorks映象,对于调试硬件无关的上层应用程序显得不是很方便。
在Tornado工作台的Build窗口中,选择Rules属性页中的VxWorks即可生成可加载的VxWorks映象。
12.2基于ROM的VxWorks映象
这是一种运行于RAM中,但起初存放于ROM中的VxWorks映象。
即该映象需要和搬移程序一起固化在BOOT中。
目标板上电后,首先运行BOOT中的引导搬移程序,将整个VxWorks映象拷贝到RAM地址RAM_LOW_ADRS处,并跳转到此处执行。
如图2所示。
>
$
<
该映象根据是否被压缩又可分为:
基于ROM的未压缩的VxWorks映象,可直接从ROM拷贝到RAM中
基于ROM的压缩的VxWorks映象,这种映象主要是为了节约BOOT空间,在从ROM拷贝到RAM的过程中需要解压缩,因此与上述未压缩的映象相比,它的引导过程相对较慢,但两者在RAM中的运行速度是一样的。
12.3驻留ROM的VxWorks映象
这种映象起初也和搬移程序一起固化在BOOT中。
目标板上电后,首先运行BOOT中的引导搬移程序,但仅将VxWorks映象的数据段和BSS段拷贝到RAM地址RAM_LOW_ADRS处,映象的代码段仍旧留在ROM中,从ROM中开始执行。
如图3所示。
.
这种映象的优点是具有最快的引导速度,占用最少的RAM空间,适用于RAM空间有限的目标板。
但是由于该映象在ROM中运行,运行速度在三种映象中是最慢的。
$
@
;
几种不同的BOOTROM的比较
针对上述三种不同的VxWorks映象,可以生成以下几种不同的BOOTROM,主要体现在执行搬移程序romStart()(位于文件中)时不同:
12.4
12.5用于可加载VxWorks映象的BOOTROM
由图1所示可知,用于可加载VxWorks映象的BOOTROM包含两部分:
起始引导程序(B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BSP 知识 概述