BSP基本知识

BSP(The Board Support Package)为操作系统提供了内核与外界的接口。它包含了用户定义的硬件功能,它也包括实现支持操作系统驱动程序与外部设备的数据交换功能,即对驱动程序的支持。在Vxworks系统中,BSP提供的主要功能有:负责设备上电初始化或复位初始化;负责中断建立和中断处理;负责硬件时钟和时钟管理;映射内存和总线内存,这些基本的服务为实时内核提供了多任务的功能,并且为应用程序的设计建立内存空间。以下三种观点可以帮助我们正确的理解BSP的概念。
1.   BSP是设备驱动的内核接口。
 BSP在硬件和操作系统之间提供了一个标准化的接口。虽然BSP提供了设备驱动接口,通过轮寻方式允许内核和硬件资源(设备控制 器、CPU、内存、内外总线等)之间进行通讯,但是BSP不能直接访问硬件资源。图1说明了VxWorks和应用程序开发者之间如何保持了硬件无关性,BSP提供了硬件资源和嵌入式计算机系统体系结构之间的接口。BSP为实时操作系统(real-time operating system)提供了一个稳定的环境和一个共同的API(application programming interface),这种标准接口定义了BSP应用约定和确认过程。正是由于这些API接口,使得VxWorks为应用程序编码提供了一个高深的体系结构和硬件无关特性,这正是VxWorks的优势。由于BSP模块化的设计和提供了一致的接口,使得应用程序和VxWorks具有较好的移植性。可以用一个形象的例子来说明这种移植性,BSP类似于地毯和地板之间的双面胶,把应用程序和不同的设备进行了有效的粘合。
2. BSP是为内核提供硬件服务的一套库文件.
BSP把硬件相关的功能独立成为一套库文件加强了模块化设计,这些库文件为嵌入式系统中获得硬件功能提供了一致的软件接口。图2说名了支持PowerPC目标处理器BSP的典型文件以及在host机器上的文件目录.
3.BSP支持Host/Target交叉开发环境.
BSP通过在Host计算机上和嵌入式目标板(CPU、硬件设备和板上内存)之间提供了client/server通信协议,使得开发者在Host计算机上可以利用Tornado工具(编辑、编译、配置、链接和调试等)进行工程开发,从VxWorks开发者的角度来说,BSP为WDB(Wind DeBug)提供了一个接口,使得WDB提供了一个在不同目标体系结构的处理器上进行交叉开发的开放标准,Host计算机通过目标服务器(target server,扮演了通信代理的角色)支持这种服务,目标BSP能支持网络开发。当应用程序开发已经完成嵌入式设备准备生产时,可以从目标BSP中移除WDB代理。图3说明了一个典型的交叉开发嵌入式编程模式,通过目标BSP的支持使得WDB client和host目标服务器进行通信。对于目前的嵌入式应用来说,嵌入式系统需要驻留在Host计算机上一套开发工具,需要嵌入式操作系统的支持,还需要提供模块化支持不同处理器接口,从这方面来说,以上对BSP描述的三种观点是一致的。
 
以下部分来自网络:
BSP是Board Support Package的缩写,该术语通常用于嵌入式领域,主要指在开发嵌入式应用时系统开发商提供的各种驱动支持库。不过该术语即使在嵌入式领域人们对它的理解也有一些不同,有的认为它就是驱动程序,有的认为它是OS的驱动程序,也有认为它就是HAL(HardWare Abstract Layer )。实际上这几种理解都只是侧重于某个部分,再由于每个嵌入式系统提供商都根据自己的系统而提出对BSP的不同理解,因此在涉及到BSP的具体涵义时人们往往有一种似是而非的感觉。嵌入式系统提供商的龙头老大:WindRiver公司对BSP的理解偏向于是OS的驱动程序(注:从其BSP的文档中可以看出)因为嵌入式系统中的各种设备的确名目繁多,因此将BSP定位于OS的驱动的确有一定的道理。对于认为BSP就是驱动程序的人来讲,估计他们通常是接触的嵌入式系统提供商提供的某种应用解决方案的应用系统(Total Solution)。在这种开发系统中BSP完全有理由被认为是所有驱动程序,因为开发人员没有必要自己去开发驱动程序,而只是验证驱动程序在自己的系统中是否正确了事。对于开发嵌入式OS的人来讲,似乎将BSP看成是对硬件平台的抽象层(HAL)和CPU的驱动程序更恰当。因此各种理解都有一定的道理,但由于出发点不同,对BSP的理解都有失全面甚至有错误的地方.
所有的人肯定对搭积木都有一定的了解,可以用各种简单的图形积木搭建成各种物体。在程序设计的世界中人们一直希望能够利用一些可重复使用的基本程序单元来构建自己的程序或者系统。在这方面已经有了一些比较成功的案例:各种标准共享库、标准程序组件等的广泛使用。但是这些成功的案例都有一个共同的特点:都是不基于任何硬件平台的程序。当开发某个平台的、与硬件相关的程序时,往往不得不从设置某个寄存器的某个位开始编程。在嵌入式领域,这种情况更为明显。在嵌入式领域中,几乎所有的设备控制和各种协议控制都在同一个嵌入式CPU当中,非常有利于对CPU Core和设备进行抽象。如果能对CPU Core和设备的各种控制进行抽象,人们在移植OS或者开发驱动程序时就没有必要对CPU进行非常深入的了解,不必要了解某个寄存器的某个位是控制什么的,也没有必要了解怎样初始化某个控制寄存器等等。因此BSP是一种能为程序开发人员提供对硬件进行描述性操作的开发支撑库。描述性操作是指在控制硬件时只需知道要完成什么,而不需要知道如何去完成,每个操作都是一些单一的动作。例如:对于设置一个串口的波特率,只需要知道是那个串口,波特率是多少,而不需要知道要写那一个寄存器以及如何写等。在利用BSP编写Driver时,编程人员只需要了解该Driver的初始化顺序以及初始化的内容而不需要了解初始化的具体细节就能完成驱动程序。显然可以大大的提高工作效率,并且对于硬件的具体细节设置是在驱动程序中最容易出错的地方,而利用BSP支撑库则可以大大的减少出错的可能性。在BSP支撑库中除了对硬件的描述性操作部分的代码外,还包含了对目标板的初始化部分、中断管理部分以及一些简单的驱动程序程序单元。这样的BSP可以不用依赖于任何的操作系统和驱动程序,但是可以作为操作系统和驱动程序的开发支撑库,可以非常方便的移植或者开发OS与驱动程序。在最好的情况下,OS与驱动程序的移植只需要更换相应平台下的BSP支撑库就完成了移植。 (摘录于bbs.ustc.edu.cn)

   其实感觉对操作系统着一块,应该分为硬件相关于硬件无关两部分,vxworks给的许多源码也是这样分的。BSP这一块,里面的驱动部分起始也分为以上所说的两部分。硬件相关的部分是在我们移植过程中需要特别注意的。而上层所提供的软件接口都是一样的,只是有些硬件可能有某种特殊功能需要扩展。就像对一般的外设进行操作其实都可以看作对文件操作一样。所以,在vxworks那么多源码中其实有好多代码只是一个中间层,将所有的操作都适配成所提供的API。注意这一点也许对读源码和规范的编程有所帮助。 

你可能感兴趣的:(编程,OS,嵌入式,平台,程序开发,嵌入式操作系统)