嵌入式计算机系统主要由硬件层、中间层、系统软件层和应用软件层四层组成。

  • 硬件层:包含CPU、存储器(SDRAM、ROM、Flash等)、通用设备接口和 I/O接口(A/D、D/A、I/O等)。其中操作系统和应用程序都可以固化在ROM中。
  • 中间层:硬件层与软件层之间称为中间层,可以称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP)。
  • 系统软件层:系统软件层由操作系统(RTOS、LINUX、VxWorks等)、文件系统、网络系统及通用组件模块组成。
  • 应用软件层:应用软件层是由操作系统开发的应用程序组成,用来实现某种功能或者业务。
  • BSP定义

    硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据 BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。

    应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP。

    BSP特点

    BSP具有以下两个特点

  • 硬件相关性:
  • 因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。

  • 操作系统相关性:
  • 不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。

    BSP的主要工作

    设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及设计硬件相关的设备驱动程序。

    (1)嵌入式系统硬件初始化

    从硬件到软件的次序,可以将硬件初始化分为3个部分,分别为片级初始化、板级初始化和系统级初始化。

  • 片级初始化
  • 主要工作是完成嵌入式微处理器的初始化,即ARM、PowerPC等CPU的初始化。包括设置微处理器的核心寄存器和控制寄存器、微处理器核心工作模式和微处理器的局部总线模式等。片级初始化把微处理器从上电时的默认状态逐步设置成系统所要求的工作状态,这是一个纯硬件的初始化过程。

  • 板级初始化
  • 主要工作是完成嵌入式微处理器以外的其他硬件设备的初始化,即外围电路的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。

  • 系统级初始化
  • 主要工作是进行操作系统的初始化。BSP将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作。包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区;加载并初始化其他系统软件模块,如网络系统、文件系统等。最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。

    (2)设计硬件相关的设备驱动程序

    BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。

    BSP在嵌入式系统和Windows系统中的不同

           在日常生活中使用的PC机上(windows或linux系统)也是有BSP的,只是PC机均采用的CPU架构为统一的x86体系架构。因此操作系统的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持操作系统在x86上正常运行,所以在PC机上谈论BSP这个概念没有什么意义了。

    而嵌入式系统则完全不同,目前市场上存在多种架构的的嵌入式CPU(ARM,MIPS,RISC-V等),同时外围设备也会根据需求有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP。即使同一种CPU,由于外设的差别,其BSP相应的部分也不一样。所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。

    BSP和PC机主板上的BIOS区别

           BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化等)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。

    在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义等),而Bootloader只是简单的装载系统。

    BSP和操作系统绑在一起运行在主板上,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口等),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。

    BSP与HAL的关系

           硬件的变动将会对BSP(板级支持层)进行大规模改动,无疑对BSP的维护是一种巨大的负担。引入了HAL(硬件抽象层)的概念,由HAL库对BSP库进一步的封装,形成统一的标准,而下次再改动硬件电路部分时,只需要改动BSP库的具体功能函数,而不需要对上层进行任何的修改。

     参考:

    BSP 概念解析_axlrosek的博客-CSDN博客https://blog.csdn.net/axlrosek/article/details/1566350

    嵌入式 bsp_feeling2012-2012的博客-CSDN博客https://blog.csdn.net/happy_6678/article/details/5949139?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~top_click~default-1-5949139.nonecase&utm_term=%E5%B5%8C%E5%85%A5%E5%BC%8Fbsp%E4%B8%8Edsp%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1000.2123.

    BSP和HAL层的区别和联系_Ronin Xu的博客-CSDN博客_bsp和halhttps://blog.csdn.net/qq_43603125/article/details/110928807

    嵌入式系统BSP基础知识 – 百度文库https://wenku.baidu.com/view/8bd80eb40a4e767f5acfa1c7aa00b52acec79c66.html

    物联沃分享整理
    物联沃-IOTWORD物联网 » BSP概念总结

    发表评论