BSP的概念
在 U-Boot(以及整个嵌入式开发领域)中,BSP(Board Support Package,板级支持包) 是连接通用软件(如 U-Boot 核心、Linux 内核)与具体硬件电路板的“桥梁”,是让通用软件能在特定硬件上正常运行的最小化支持集合。
简单说:U-Boot 的核心是“通用的引导框架”,而 BSP 是为“某一款具体电路板”定制的适配代码/配置,没有 BSP,U-Boot 核心无法识别你的硬件,也无法启动。
一、BSP 的核心作用:让 U-Boot 认识你的硬件
U-Boot 作为嵌入式系统的引导程序,核心功能是初始化硬件、加载内核,但不同电路板的硬件差异极大(比如 CPU 型号、内存、Flash、网卡、串口、GPIO 等)。BSP 的核心目标就是:
- 硬件初始化:告诉 U-Boot 如何配置当前电路板的核心硬件(如内存时序、串口引脚、Flash 控制器),让硬件从“上电默认状态”进入“可工作状态”;
- 硬件资源映射:告诉 U-Boot 硬件资源的位置(如内存地址、寄存器地址、设备树节点),让 U-Boot 能操作这些硬件(如读写 Flash、通过串口打印信息、通过网卡下载文件);
- 适配引导流程:定制与当前电路板匹配的引导逻辑(如从哪个存储介质启动、内核加载地址、传参方式)。
二、U-Boot 中 BSP 包含哪些具体内容?
U-Boot 的源码结构中,BSP 相关代码通常集中在特定目录,核心组成部分如下:
1. 板级配置文件(最核心)
- 路径:
include/configs/<board_name>.h(老版本)或configs/<board_name>_defconfig(新版本 Kconfig 配置); - 作用:定义电路板的关键参数,比如:
- CPU 型号、架构(如 ARM、RISC-V);
- 内存大小、内存起始地址(如
CONFIG_SYS_SDRAM_BASE=0x80000000); - 串口波特率、串口控制器编号(如
CONFIG_BAUDRATE=115200); - Flash 类型(NAND/NOR/eMMC)、容量、地址;
- 引导相关配置(如默认启动设备、内核加载地址
CONFIG_SYS_LOAD_ADDR); - 支持的外设(如网卡、USB、SD 卡)开关。
2. 板级初始化代码
- 路径:
board/<vendor>/<board_name>/(如board/rockchip/rk3568-evb/,对应瑞芯微 RK3568 评估板); - 核心文件:
board.c:板级初始化入口(如board_init()函数),负责初始化内存、Flash、外设引脚等;lowlevel_init.S(汇编文件):早期硬件初始化(上电后最先执行),比如关闭看门狗、配置时钟、初始化栈,为 C 语言代码运行做准备;- 其他外设适配代码(如网卡、eMMC 的板级适配)。
3. 设备树(Device Tree,DTB)
- 路径:
arch/<arch>/dts/<board_name>.dts(如arch/arm/dts/rk3568-evb.dts); - 作用:用“树形结构”描述硬件资源(如 CPU 核心、内存、串口、GPIO 引脚、外设控制器),替代传统的“硬编码”,让 BSP 更灵活(同一芯片的不同电路板可复用大部分 DTS 代码);
- 注意:U-Boot 会加载 DTB 并解析,后续也会将 DTB 传递给 Linux 内核,是 BSP 中“硬件描述”的核心。
4. 驱动适配(可选)
- 若 U-Boot 核心自带的通用驱动(如 eMMC 驱动)无法直接适配电路板的硬件细节(如引脚复用、时序参数),BSP 会包含少量驱动补丁或板级驱动适配代码。
三、为什么 U-Boot 必须依赖 BSP?
U-Boot 的核心代码是“通用的”——它不绑定任何具体电路板,支持多种 CPU 架构(ARM、RISC-V、x86 等)和外设类型,但它不知道你手里的电路板:
- 内存是 512MB 还是 2GB?
- 串口用的是哪个引脚?
- 内核存在 eMMC 的哪个分区?
这些“电路板专属信息”都必须通过 BSP 告诉 U-Boot,U-Boot 才能完成硬件初始化并引导内核。
四、实际开发中 BSP 的使用场景
- 移植 U-Boot 到新电路板:核心工作就是编写/修改 BSP——基于芯片厂商提供的参考 BSP(如瑞芯微、全志的评估板 BSP),调整配置文件(
defconfig)、设备树(dts)和板级初始化代码(board.c),适配自己的电路板硬件; - 修改现有电路板的功能:比如新增一个串口、更换更大容量的 Flash、启用网卡功能,本质上是修改 BSP 中的配置(如打开
CONFIG_ETH开关)、设备树(添加网卡节点)或板级初始化代码(配置网卡引脚); - 芯片厂商提供的 BSP:芯片厂商(如 NXP、Rockchip)会为自己的芯片配套评估板(EVB)提供完整的 U-Boot BSP,开发者可基于此快速适配自己的产品板(减少重复开发)。
总结
U-Boot 中的 BSP 是“电路板专属的适配层”,包含:
- 硬件配置(
defconfig); - 硬件描述(
dts); - 硬件初始化(
board.c、lowlevel_init.S); - 外设适配代码。
它的核心价值是屏蔽硬件差异,让通用的 U-Boot 核心能在特定电路板上“即插即用”,是嵌入式引导程序移植和开发的核心环节。
浙公网安备 33010602011771号