1. 嵌入式系统概述
1.1 嵌入式系统定义
嵌入式系统(Embedded System)是一种以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。与通用计算机(如PC、服务器)不同,嵌入式系统被“嵌入”到宿主设备中,完成特定任务,用户通常不直接感知计算机的存在。
核心定义三要素:
- 专用性:面向特定应用场景,非通用计算平台。
- 可裁剪:软硬件按需配置,去除冗余。
- 约束性:受功耗、成本、实时性、体积等严格限制。
1.2 嵌入式系统组成
一个典型的嵌入式系统由硬件平台和软件系统两大部分组成,二者紧密耦合、协同工作。
| 层次 | 组成部件 | 典型代表 | 说明 |
|---|---|---|---|
| 硬件层 | 嵌入式处理器 | ARM Cortex-A/M/R, RISC-V, x86 | 系统核心,决定运算能力与功耗 |
| 存储器 | Flash, SRAM, SDRAM, EEPROM | 代码存储与运行空间 | |
| 外设接口 | UART, SPI, I2C, GPIO, USB, Ethernet | 与外部设备通信 | |
| 电源管理 | PMIC, LDO, DC-DC | 功耗控制与电压调节 | |
| 软件层 | Bootloader | U-Boot, Barebox, ATF | 硬件初始化与系统引导 |
| 操作系统 | Linux, FreeRTOS, RT-Thread | 任务调度与资源管理 | |
| 驱动程序 | BSP, 设备驱动 | 硬件抽象与操作 | |
| 应用程序 | 用户业务逻辑 | 实现具体功能 |
1.3 嵌入式系统特点
嵌入式系统与通用计算机系统相比,具有以下显著特点:
| 特点 | 描述 | 对Bootloader的影响 |
|---|---|---|
| 实时性 | 必须在规定时间内响应外部事件 | Bootloader需快速完成初始化,减少启动延迟 |
| 资源受限 | CPU主频低、内存小、存储空间有限 | Bootloader代码需精简高效,占用极小空间 |
| 低功耗 | 电池供电设备对功耗极其敏感 | Bootloader需支持时钟门控、休眠唤醒 |
| 高可靠性 | 无人值守运行,故障容忍度低 | Bootloader需具备看门狗、校验、恢复机制 |
| 专用性强 | 软硬件针对特定应用定制 | Bootloader需适配特定板级硬件配置 |
| 软硬件协同 | 软硬件紧密耦合,不可分割 | Bootloader需深度操作寄存器与硬件时序 |
💡 学习提示:嵌入式系统的资源受限特性是理解Bootloader设计的关键出发点。U-Boot之所以采用“SPL(Secondary Program Loader)+ U-Boot proper”的两阶段启动方式,正是为了在有限的片上SRAM中完成初始加载。
1.4 嵌入式系统应用领域
嵌入式系统已渗透到国民经济和日常生活的各个领域,以下是主要应用场景:
- 消费电子:智能手机、智能手表、机顶盒、游戏机、数码相机。
- 工业控制:PLC、工业机器人、数控机床、数据采集系统。
- 汽车电子:发动机控制单元(ECU)、ADAS、车载信息娱乐系统、T-Box。
- 医疗设备:心脏起搏器、CT机、便携式监护仪、血糖仪。
- 航空航天:飞行控制系统、卫星通信、导航设备。
- 物联网:智能家居网关、传感器节点、边缘计算设备。
- 网络通信:路由器、交换机、基站、光模块。
1.5 嵌入式系统发展趋势
当前嵌入式系统正朝着以下方向快速发展,这些趋势直接影响Bootloader的设计与移植策略:
| 趋势 | 具体表现 | 对Bootloader的挑战 |
|---|---|---|
| 多核异构 | ARM big.LITTLE、Cortex-A + Cortex-M + DSP组合 | 需支持多核启动、核间通信、电源域管理 |
| AI边缘计算 | NPU集成、端侧推理、模型部署 | Bootloader需初始化NPU时钟与内存 |
| 功能安全 | ISO 26262(汽车)、IEC 61508(工业) | 需支持安全启动、固件校验、双备份恢复 |
| 虚拟化 | Hypervisor、多OS共存、容器化 | Bootloader需加载EL2/EL3固件 |
| RISC-V生态 | 开源指令集架构快速崛起 | Bootloader需新增RISC-V平台支持 |
| OTA升级 | 远程固件更新、A/B分区切换 | Bootloader需支持AB系统、回滚机制 |
⚠️ 重要提醒:多核异构架构已成为高端嵌入式SoC的主流方案。以ARM Cortex-A72(应用核)+ Cortex-M4(控制核)的组合为例,Bootloader需要分别初始化两个核的异常向量表、MMU和时钟域,并确保主核启动时从核处于复位等待状态。这是U-Boot移植中最容易出错的环节之一。
1.6 嵌入式系统与Bootloader的关系
Bootloader是嵌入式系统启动流程中的第一个软件组件,承担着从硬件复位到操作系统启动之间的桥梁作用。理解嵌入式系统的整体架构,是掌握Bootloader设计与移植的前提。
Bootloader在嵌入式系统中的核心职责:
- 硬件初始化:设置时钟、配置DDR、初始化串口等外设。
- 内存布局:建立页表、使能MMU(可选)、规划内存空间。
- 镜像加载:从Flash/网络/存储设备读取OS内核到内存。
- 启动参数传递:向内核传递设备树(DTB)、命令行参数。
- 安全校验:验证镜像签名,防止篡改。
- 恢复机制:启动失败时进入恢复模式或备用系统。