板级支持包(BSP)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。在嵌入式系统软件的组成中,就有BSP。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。
板级支持包BSP(Board Support Package)是外设、硬件的驱动软件集合。单独使用BSP即可在嵌入式系统上开发应用。BSP也可以按照规范编写为操作系统(VxWorks、Linux等)提供接口。
但是由于日益增长的芯片种类和芯片复杂度,每种芯片的外设寄存器地址和控制方式都各不一样,针对每种Board编写BSP工作量很大。一般公司例如ST会提供HAl库,用户可以忽略寄存器的繁杂操作,直接调用HAL库函数即可进行芯片内部外设操作,大大降低BSP软件的开发周期。加入HAL库之后的系统软件结构如下图所示:
引入HAL之后操作系统将会使用相对更为统一的HAL接口来实现对硬件的操作,而不是直接使用BSP库。
hardware --> hardware abstract layer --> board support package --> driver --> operating system --> application
当然嵌入式系统中操作系统并不是必须的,并且在操作系统和应用程序之间可以在有一层中间件Middleware层,用于提供更多的系统功能,这个中间件Middleware层也被称作SDK。