bsp
定义
板级支持包是嵌入式系统中面向某一块具体电路板编写的支持代码集合,其目标是完成操作系统的启动以及对板上各设备的驱动。它一般服务于评估板或目标板,因为内容与板上的处理器型号、存储器布局和外设配置直接绑定[4]。
在嵌入式软件结构中,它处在硬件与操作系统之间,属于与硬件关系最紧密的那部分软件模块;有文献把它视为操作系统的一个组成部分,也有文献把它理解为硬件抽象层的具体实现[5][6]。完整的板级支持包常以源码、头文件、makefile 与说明文档的形式交付,方便使用者针对自己的板卡修改[1]。
原理
系统上电后,板上处理器首先执行的代码来自引导程序(引导程序),它设置栈指针、屏蔽中断、初始化时钟与存储器控制器,随后把操作系统映像搬入内存并转交控制权[7][8]。在 QNX 等系统中,承担这一任务的组件被称为初始程序加载器,需要针对具体硬件配置内存控制器和时钟[9]。
操作系统运行起来之后,板级支持包中的驱动与系统相关例程继续被内核调用,用来响应中断、读写串口、以太网与存储等设备,向上提供统一接口[1][6]。因此它对上要求遵循宿主操作系统的接口规范,对下要求与板卡原理图一致,是一层双向适配。
典型的分层关系如下:上层为内核与应用程序,中间为板级支持包,下层为处理器与板上外设。
应用层 / 内核
↑ 标准接口
板级支持包(bsp)
↑ 寄存器操作
处理器 / 外设 / 存储器
发展历程
这一术语大约在 1988 年出现,来源最常被归于风河公司为其实时操作系统 VxWorks 提供的支持包,此后 QNX、微软等厂商也各自为自家嵌入式系统提供类似组件[10]。微软的 Windows Embedded Compact 把内核独立传输层、OEM 适配层、引导程序、设备驱动与配置文件一并纳入其支持包定义之中[2]。
早期版本的支持包内容较多,到 VxWorks 7 时已被简化,主要成分变为组件描述文件与设备树文件[11]。在嵌入式 Linux 一侧,设备树与构建框架的分层机制逐步承接了描述硬件的工作,支持包更多以构建层的形式组织,内容涵盖引导程序、内核配置与补丁、固件二进制等[12][13]。
随着片上系统普及,同一款芯片内的外设趋于固定,把参考板的支持包移植到自有板卡时可以复用其中大部分驱动,只需较少改动[9]。
应用
板级支持包用于嵌入式产品的底层软件开发,是操作系统选定后、上层应用开发前必须完成的工作,常见于工业过程控制、通信设备和航天器等对软硬件可靠性要求较高的场合[3]。芯片与板卡厂商通常随开发板提供配套支持包,便于开发者在硬件上评估系统特性。
在嵌入式 Linux 项目中,支持包常见形式是独立的构建层,其中包含机器配置文件、引导程序与内核的选取和配置、固件二进制以及启用特定硬件功能所需的组件[14]。具体产品如 SylixOS 的工程模板,把包括头文件、启动框架、驱动代码与编译链接配置划分为若干目录,说明这一概念在实际工程中的落地形态[15]。
半导体厂商也以支持包为交付单位发布 Linux 版本,随包附带用户手册、发行说明与快速上手指南,供客户在其参考板上复现编译环境[16]。部分仪器厂商则将支持包用于 FPGA 开发软件与自家硬件平台的适配。
局限
板级支持包与板卡、与操作系统都高度绑定。同一颗处理器在不同操作系统下的支持包,功能可以相同,但写法与接口定义并不通用,移植时必须按宿主系统的规范重写[17]。同型号处理器若外设配置不同,相应部分也要跟着调整。
在嵌入式 Linux 领域,这一术语并没有严格统一的边界,不同厂商给出的内容范围差别较大,有的供应商还会在其中混入与硬件支持无关的示例程序甚至自定义发行版配置,使支持包难以与产品其他部分分离[18]。
此外,任何一家操作系统厂商都无法覆盖市面上的全部板卡,遇到未被收录的硬件就需要自行开发,这也构成了底层驱动工程师这一岗位长期存在的原因[19]。它也不等同于通用计算机主板上固化的基本输入输出系统,后者通常由厂商提供、用户只能修改参数,而支持包一般以可编译的源码交付并允许改写[20]。
参见
参考资料
- 风河板级支持包(BSPs) [引用日期2026-10-29]
- gg156127(v=winembedded [引用日期2026-10-29]
- BSP(板级支持包) [引用日期2026-10-29]
- 内容比较 [引用日期2026-10-29]
- BSP是什么意思?计算机应用中的BSP详解 [引用日期2026-10-29]
- references [引用日期2026-10-29]
- 基于VxWorks的BSP概念与开发 [引用日期2026-10-29]
- 关于BSP,BIOS,和bootloader [引用日期2026-10-29]
- The development process [引用日期2026-10-29]
- 板級支持包 [引用日期2026-10-29]
- BSP是啥? [引用日期2026-10-29]
- Re: [yocto] OE Linux & board-support-package [引用日期2026-10-29]
- 1 Yocto Project Board Support Package (BSP) Manual [引用日期2026-10-29]
- How to write a really good BSP layer [引用日期2026-10-29]
- # 板级支持包文件结构 [引用日期2026-10-29]
- S32G RDB2 Linux 板级开发包 Uboot 定制 [引用日期2026-10-29]
- references [引用日期2026-10-29]
- Re: [yocto] OE Linux & board-support-package [引用日期2026-10-29]
- BSP是啥 [引用日期2026-10-29]
- Vxworks Board Support Package的设计 [引用日期2026-10-29]