嵌人式BSP理解【完整版】

时间:2022-06-10 08:40:01 来源:网友投稿

下面是小编为大家整理的嵌人式BSP理解【完整版】,供大家参考。

嵌人式BSP理解【完整版】

 

 嵌人式 BSP 的理解

  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 提供的 init 软件来生成。

  (8)把 Data Section 从 FlashROM 拷贝到 RAM。根据硬件配宜,这是可选的,通常不作.最后 , 根 据具体的目标系统设 It 合理的系统参数,通过棋板建立设备接口,编写编译文件和链接文件把 BSP 和操作系统链接起来。

推荐访问:完整版 理解 嵌人式