02 BSP 与 Bootloader
考频:★★★★(选择题 + 填空题)
一、HAL 硬件抽象层
什么是 HAL?
HAL(Hardware Abstraction Layer,硬件抽象层):在操作系统与底层硬件之间加一层"翻译",屏蔽不同硬件的差异,让上层软件不用关心具体硬件实现。
[!TIP] HAL 的核心作用:屏蔽底层硬件差异,实现软件的可移植性。
填空答案:HAL 的作用是屏蔽底层硬件差异(或"使上层软件与硬件无关")。
二、BSP 板级支持包
什么是 BSP?
BSP(Board Support Package,板级支持包):针对某块特定硬件板子,提供操作系统运行所需的底层支持代码,是 HAL 的具体实现。
BSP 包含什么?
| 组成部分 | 说明 |
|---|---|
| 硬件初始化代码 | 上电后初始化 CPU、时钟、内存控制器等 |
| 设备驱动程序 | 控制板上外设(串口、LCD、网卡等) |
| 中断处理 | 配置中断控制器 |
| Bootloader | 引导加载程序(通常也包含在 BSP 中) |
[!NOTE] BSP = HAL 的具体实现。每换一块板子(硬件不同),就需要不同的 BSP。 同一个操作系统可以在不同硬件上运行,靠的就是针对各自硬件的 BSP。
三、Bootloader 引导加载程序
考频:★★★★(执行流程 + U-Boot 常考)
Bootloader 是什么?
Bootloader 是嵌入式系统上电后第一个运行的程序,负责初始化硬件环境、加载操作系统内核,然后把控制权交给 OS。
类比:就像 PC 上的 BIOS + 引导扇区,只不过嵌入式里叫 Bootloader。
Bootloader 两阶段执行过程
Stage 1(第一阶段)— 汇编语言编写,在 ROM/Flash 中运行
上电复位
↓
初始化 CPU(设置工作模式、频率)
↓
初始化内存控制器(配置 SDRAM)
↓
初始化系统时钟
↓
设置栈指针(Stack Pointer)
↓
跳转到 Stage 2(C 语言代码)
关键点:Stage 1 用汇编写,因为 C 语言需要栈,而栈要在 Stage 1 里初始化好。
Stage 2(第二阶段)— C 语言编写
关键点:Stage 2 用 C 写,完成复杂的初始化和内核加载工作。
[!TIP] 记忆规律: - Stage 1 = 汇编 = 初始化最基础的东西(CPU/内存/时钟/栈) - Stage 2 = C 语言 = 初始化外设 + 加载内核 + 启动 OS
常见 Bootloader 比较
考频:★★★★(选择题常考 U-Boot)
| Bootloader | 支持平台 | 特点 |
|---|---|---|
| U-Boot | ARM、x86、MIPS、PowerPC 等众多架构 | 目前支持处理器架构最多的 Linux Bootloader |
| GRUB | 主要是 x86 | PC 上最常见,不支持 ARM |
| Loadlin | x86(仅 DOS 环境) | 只能在 DOS 下使用,适用范围极窄 |
| LILO | x86 | 旧式 Linux 引导程序,已基本淘汰 |
[!WARNING] 高频考点:问"目前支持处理器架构最多的 Linux Bootloader 是哪个?"
答案是 U-Boot(选 C),不是 GRUB(GRUB 主要面向 x86)。
四、设备驱动程序
考频:★★★(分类常考)
Linux 系统中,设备驱动分为三大类:
| 驱动类型 | 英文 | 典型设备 | 特点 |
|---|---|---|---|
| 字符设备驱动 | Character Device | 串口、键盘、鼠标、LCD | 按字节流顺序读写,不能随机访问 |
| 块设备驱动 | Block Device | 硬盘、Flash、SD 卡 | 以固定大小的"块"为单位读写,可随机访问 |
| 网络设备驱动 | Network Device | 网卡、WiFi | 不对应文件系统节点,通过 socket 访问 |
[!TIP] 记忆口诀:字(字符)块(块设备)网(网络)——三类驱动。
本章小结
HAL = 屏蔽硬件差异
BSP = HAL 的具体实现(针对某块特定板子)
Bootloader 两阶段:
Stage 1 → 汇编 → CPU/内存/时钟/栈初始化
Stage 2 → C 语言 → 外设初始化 + 加载内核 + 启动OS
U-Boot = 支持架构最多的 Linux Bootloader(GRUB 不支持 ARM)
驱动三类:字符设备 / 块设备 / 网络设备
真题演练
以下是NCRE三级嵌入式真题中与本节相关的典型考题:
1. 在Bootloader的stage1中,以下各步骤的顺序应为:( )。a.跳转到stage2的C程序入口点 b.为加载stage2准备RAM空间 c.拷贝stage2的执行代码到RAM空间中 d.基本硬件初始化
- A)bdac
- B)dbca
- C)dbac
- D)dcba
答案解析
答:B Bootloader的stage1的基本步骤(按执行先后顺序)为:d.基本硬件初始化 -> b.为加载stage2准备RAM空间 -> c.拷贝stage2的执行代码到RAM空间中 -> 设置栈区指针SP -> a.跳转到stage2的C程序入口点。正确顺序为dbca。
2. 下列关于嵌入式系统板级支持包的描述中,错误的是( )。
- A)板级支持包又称为BSP
- B)板级支持包与硬件无关,故在移植操作系统时不需要改动
- C)板级支持包含有电路板的初始化程序
- D)操作系统的上层代码通过板级支持包访问底层硬件
答案解析
答:B 板级支持包(BSP)是与硬件密切相关的,它包含电路板的初始化程序,所有与特定电路板硬件相关的功能都集成在BSP的库里。在移植操作系统到新的硬件平台时,BSP是必须修改的部分。B项说"与硬件无关"是错误的。
3. 关于U-Boot,以下说法错误的是( )。
- A)U-Boot全称USB Bootloader,通过USB接口完成启动支持多种处理器和操作系统
- B)U-Boot支持PowerPC、x86、ARM等多种体系结构的处理器
- C)U-Boot支持嵌入式Linux、VxWorks、QNX、RTEMS、Windows CE等操作系统
- D)U-Boot采用两个阶段完成操作系统的引导加载
答案解析
答:A U-Boot全称是Universal Boot Loader(通用引导加载程序),而非"USB Bootloader"。它是德国DENX公司开发的,遵循GPL条款,源代码完全开放。U-Boot对PowerPC系列处理器支持最为丰富,对Linux操作系统的支持最为完善。
4. 【填空题】具有操作系统的嵌入式系统加电后最初执行的操作称为引导或者自举(Boot),对应的程序称为引导加载程序(Bootloader)。引导加载程序主要完成_、外设存在自检、内存地址映射、初始化外围设备、内存寻址定位、加载并启动_。
答案
答:加电自检;操作系统 系统中引导加载程序主要完成加电自检、外设存在自检、内存地址映射、初始化外围设备、内存寻址定位、加载并启动操作系统。这是Bootloader的核心工作流程。