BSP是Board Support Package的缩写。该术语一般用于嵌入式领域,主要指在开发嵌人式应用时系统开发商提供的各类粗动支持库。在嵌人式领域人们对BSP有各类不一样的理解: 编程
(1) 操做系统的驱动程序。嵌人式系统提供商的权威— WindRiver公司对BSP的理解偏向因而OS的驱动程序(从其BSP的文档中能够看出),由于嵌人式系统中的各类设备的确名目挤多,所以将BSP定位于OS的驱动的确有必定的道理.服务器
(2) 驱动程序。对于认为BSP就是驱动程序的人来说,他们一般接触的是嵌人式系统提供商提供的某种应用解决方案的应用系统(total solution)。在这种开发系统中,BSP彻底有理由被认为是全部驱动程序,由于开发人员没有必要本身去开发驱动程序,而只是验证驱动程序在本身的系统中是否正确便可. 网络
(3) HAL(HardwareA bstractL ayer)。对于开发嵌人式OS的人来说,倾向于将BSP当作是对硬件平台的抽象层(HAW和处理器的驭动程序更恰当. 函数
实际上各类理解都只是侧重于某个方面。因为每一个嵌人式系统提供商都根据本身的操做系统而提出对BSP的不一样理解,所以,在涉及到BSP的具体涵义时,人们每每有一种似是而非的感受.实际是各类理解都有其道理,但因为出发点不一样,对BSP的理解都有失全面甚至有错误的地方,这也是初学者容易混淆的缘由。对于进行硬件和软件开发的人员,第三种理解比较合适,后面的分析也是创建在这个基础之上的。这里经过 BSP(BoardS upport Package)和BIOS(BasicI nputa ndO utputS ystem)的对比,来讲明板级支持包的功能。BSP说得简单一点,就是一段启动代码,与计算机主板的BIOS差很少.提供的功能却有较大的差异。咱们都知道,在通用8051等系列单片机开发的过程当中,要有小段程序设堆栈指针、软复位和中断屏蔽等等能够把这短程序称为它的BSP,实时操做系统的BSP相对复杂一点,但一般也是设t堆栈指针,创建中断向量表,初始化寄存器(控制外围器件如DRAM和EDO RAM条,控制I/O Q的寄存器、片选信号等),配里地址空间以及系统启动方式。BIOS是微机的基本输人输出系统,其内容集成在微机主板上的一个ROM芯片上,主要保存着有关微机系统最重要的基本输入输出程序,如系统设置信息、开机上电自检程序和系统启动自举程序等。BIOS中断服务程序实质上是微机系统中软件与硬件之间的一个可编程接口,主要用于程序软件功能与微机硬件之间的链接。例如,Wind-98 对软驱、光驱和硬盘等管理及中断的设置等服务和程序。BIOS系统设置程序,微机部件配置记录是放在一块可的CMOS RAM芯片 中的,主要保存着系统的基本悄况、CPU特性和软硬盘驱动器等部件的信息,能够对其各项参数进行设It. BIOS系统启动自举程序,系统完成POST自检后,ROM BIOS就首先按照系统CMOS设置中保存的启动顺序搜索软硬盘驱动器及CD-ROM。网络服务器等有效地启动驱动器,读人操做系统引导记录而后将系统控制权交给引导记录,并由引导记录来完成系统的顺序启动,实时操做系统的BSP就至关于PC的BIOS通常来讲,对不一样的微处理器板以及不一样的RTOS时,就应该配置不一样的BSP, BSP能够是已经作好了的,不须要开发人员去关心寄存器设置的细节。 操作系统
固然根据实际的要求用户也能够改写BSP来加人本身的特定功能o BSP可针对不一样的硬件作不一样的调整,相应于PC的BIOS.它完成对硬件的初始化工做,执行完后再将执行权交给RTOS。在BSP中,只须要对与硬件相关的寄存器(主要是DRAM,SD RAM和片选)及与中断相关的寄存器进行正确配Y便可.BSP程序越简单越好,能放在主程序中初始化的功能尽A不要放在其中,BSP配I程序只要能保证系统正常启动便可.大部分RTOS带有针对不一样徽处理器的BSP程序,用户只要稍作修改便可移植到本身的开发应用中设备驱动程序(Drivers)指用于处理、管理硬件控制(controller)的代码。设备驭动程序是将基础创建在具体的操做系统之上,而不是某种类型的处理器(CPU)(这很重要)。实际运用中,人们可能选择不一样的目标硬件(CPU),如PowerPC,A RM,X 86,而且配f不一样的操做系统.即便对于同一种类型的目标硬件,不一样的操做系统也要编写不一样的BSP。对于驱动程序,其实是在操做系统的层次上对不一样的设备控制器所写的代码。 指针
实时操做系统的驭动程序与PC的相相似eR TOS一般在BSP定义了一套本身的驱动程序接口,根据这些接口写相应的驱动程序。固然RTOS与硬件较紧密,灵活性较大,开发人员彻底能够抛开它提供的接口而本身编写骆动程序.这同直接在C代码中调用BIOS提供的底层功能(如BIOS中断)编写程序相似。BSP一般能够认为是基于硬件平台的。当开发某个平台且与硬件相关的程序时,每每不得不从设置某个寄存器的某个位开始编程。在嵌人式领城,这种状况更为明显,几乎全部的设备控制和各类协议控制都在同一个嵌人式CPU核当中,很是有利于对CPU核和设备进行抽象.若是能对CPU核和设备的各类控制进行抽象,则人们在移植OS或者开发驭动程序时,就没有必要对CPU进行很是深刻的了解,没必要要了解某个寄存器的某个位是控制什么的,也没有必要了解怎样初始化某个控制寄存器等等。所以,BSP是一种能为程序开发人员提供对硬件进行描述性操做的开发支律库。描述性操做是指在控制硬件时只需知道要完成什么,而不须要知道如何去完成,每一个操做都是一些单一的动做.例如:对于设置一个串口的波特率,只须要知道是哪一个申口,波特率是多少,而不须要知道要写哪个寄存器以及如何写等。在利用BSP编写驱动程序时,编程人员只须要了解该驱动程序的初始化顺序以及初始化的内容,而不须要了解初始化的具体细节就能完成驱动程序。能够大大地提升工做效率。而且对于硬件的具体细节设1l`是在驱动程序中最容易出错的地方,而利用BSP支撑库则能够大大地减小出堵的可能性。在BSP支排库中,除了包含对硬件的描述性操做部分的代码外,还包含了对目标板的初始化部分、中断管理部分以及一些简单的驱动程序程序单元。这样的BSP能够不依赖于任何操做系统和骆动程序,可是能够做为操做系统和驱动程序的开发支排库,能够很是方便地移植或者开发操做系统与驱动程序。在最好的状况下,操做系统与骆动程序的移植只须要更换相应平台下的BSP支排库便可完成移植。BSP是对目标系统的软件支持,是一些硬件具体的函数的集合,主要完成下面的功能: 接口
(1) 在系统启动时,对目标系统进行硬件初始化; 内存
(2) 提供对目标系统设备的接口.如时钟、Ethernet控制器、串行芯片和SCSI控制器在PSOS 中,对于不一样的开发系统,其不一样的特性在板级支持包BSP的bsp.h 文件中做了具体的定义。例如基本特性,包括处理器类型BSP_CPUFAMILY(PoweiTC,68000,X86和1960等),具体的处理器(PPC604和PPC603等),还有浮点支持BSP_FPU,字符模式选择BSP间的开始地址。其它的如串行通道特性、LAN接口特性ENDIAN等,BSP_RAM_BASE RAM空、共享存储器通讯以及板级支持包参数设定的缺省值。bsp.h ,bspcfg.h 和bspcfg.c 文件提供了在应用程序编译时对某些BSP特性进行配置是必要的。BSP进行配置的选项和实现。应用程序对例如,BSP_ LANI代表BSP是否须要LAN驱动,能够设置为是或否。这个参数会被多个文件使用,包括是否编译和创建LAN驱动,让操做系统支持LAN操做目标系统在复位后,要作的第一项工做就是对硬件设备进行初始化,执行Hwdinit函数。该函数完成在C中没法进行的初始化任务,Initboard函数在C代码继续板级初始化,这一般被称为硬件初始化(hardware initialization),相应的sysinit函数完成非硬件初始化任务(software initialization)。在Hwdinit中BSP中对具休的处理器配置步骤以下 开发
(1) 设置MSR,包括校验、优先级模式、禁止中断、禁止地址转换。即extern unsigned long ppcMSRrd(void); 文档
(2 )给减计数器处置,调用ppcDECwr,把值写人DE(,即exter nvoid ppcDECwr(unsignedl ongv alue);
(3) 禁止指令和数据Caches,即exter nunsigned long SysDcachelnhibit(void); exter nvoid SysIcacheInhibit(void);
(4) 初 始 化核心寄存器,包括
MachineS tatusR egister( MSR) //机器校验使能,中断可恢复
Instruction Support Control Register (ICTRL) / /开 发 端 口捕 获 使能
Debug Enable Register (D ER O) // 关 闭调 试 中 断
Interrupt Cause Register( ICR ) / /关 闭中 断 事 件
Internal Memeory MapRegister (IMMR ) // 设 里 内部 存 储 区 地 址
System Interface Unit (SIU ) Module Configuration Register ( SIUMCR )Reset Status Register RSR) //复 位控制
(5)使能减法计数器。
(6)初始化片选寄存器。(对Flash内存)
(7)肯定DRAM的类型,设UPMX初始化表,即extern HdwInitDRAM(void)为了经过 UPMX访问外部不一样结构和速率DRAM,生成相应的初始化表,可使用Motorola提供的MCUinit软件来生成。
(8)把 Data Section从FlashROM拷贝到RAM。根据硬件配宜,这是可选的,一般不做.最后 , 根 据具体的目标系统设It合理的系统参数,经过棋板创建设备接口,编写编译文件和连接文件把BSP和操做系统连接起来。