1. 嵌入式系统概述
1.1 嵌入式系统的定义
嵌入式系统(Embedded System)是一种以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它通常作为某个更大系统(宿主系统)的一部分,执行预定义的特定任务,而非像通用计算机那样运行用户自主安装的任意软件。
核心定义关键词: 专用性、可裁剪、资源受限、实时性、高可靠性。
1.2 嵌入式系统的特点
与通用计算机相比,嵌入式系统在设计理念、资源约束和运行环境上具有显著差异,主要体现在以下方面:
| 特点 | 说明 | 典型体现 |
|---|---|---|
| 专用性强 | 软硬件面向特定应用定制,功能单一且固化 | 智能手表无法运行桌面版Photoshop |
| 资源受限 | CPU主频低、内存小、存储空间有限 | ARM Cortex-M系列通常只有几十KB RAM |
| 低功耗设计 | 电池供电场景要求毫瓦级功耗控制 | IoT传感器节点待机电流低至μA级 |
| 高可靠性与实时性 | 系统需在严格时限内响应外部事件 | 汽车安全气囊必须在碰撞后10ms内触发 |
| 软硬件一体化 | 软件固化在ROM/Flash中,与硬件深度耦合 | 固件升级通常需要整机重启 |
| 开发环境与运行环境分离 | 在宿主机(PC)上开发,交叉编译后部署到目标板 | 本课程核心:交叉编译环境配置 |
1.3 嵌入式系统的应用领域
嵌入式系统已渗透到现代社会的各个角落,覆盖从消费电子到工业控制、从医疗设备到航空航天等关键领域:
- 消费电子:智能手机、智能手表、数字电视、游戏机、智能音箱。
- 工业控制:PLC(可编程逻辑控制器)、工业机器人、数控机床、传感器节点。
- 汽车电子:发动机控制单元(ECU)、ADAS(高级驾驶辅助系统)、车载信息娱乐系统。
- 医疗设备:心脏起搏器、CT/MRI成像系统、便携式血糖仪、呼吸机。
- 航空航天与国防:飞行控制系统、卫星通信模块、无人机飞控、雷达信号处理。
- 物联网(IoT):智能家居网关、环境监测终端、可穿戴设备、边缘计算节点。
行业趋势: 随着AIoT(人工智能+物联网)的发展,嵌入式系统正从“简单控制”向“边缘智能”演进,对算力和操作系统的要求越来越高,这也是本课程选择ARM嵌入式Linux作为核心平台的重要原因。
1.4 嵌入式系统与通用计算机系统的区别
为了更直观地理解嵌入式系统的定位,下面从多个维度对比两者:
| 对比维度 | 通用计算机系统 | 嵌入式系统 |
|---|---|---|
| 系统目标 | 通用计算,用户可安装任意软件 | 专用功能,软硬件面向特定任务定制 |
| 操作系统 | Windows、macOS、通用Linux发行版 | 嵌入式Linux、RTOS(FreeRTOS、VxWorks)、裸机 |
| 处理器架构 | x86/x86-64(Intel/AMD) | ARM、RISC-V、MIPS、Xtensa |
| 资源规模 | GB级RAM、TB级存储、GHz级主频 | KB~MB级RAM、MB~GB级Flash、MHz~GHz主频 |
| 功耗 | 数十瓦到数百瓦 | 毫瓦到数瓦(电池供电场景) |
| 实时性要求 | 软实时或无实时要求 | 硬实时或软实时(取决于应用) |
| 开发模式 | 本机开发、本机运行 | 交叉开发:宿主机编译,目标机运行 |
| 升级维护 | 用户可自行安装更新 | 通常需要专用工具或OTA远程升级 |
| 典型成本 | 数千到数万元 | 数元到数千元(大批量可低至几美元) |
1.5 嵌入式系统的典型架构
一个完整的嵌入式系统通常包含硬件平台、底层软件和应用软件三层。下面通过SVG图展示其分层结构:
从上图可以看出,嵌入式系统的软件栈从底层硬件到上层应用层层递进。本课程的核心——交叉编译环境配置与ARM嵌入式Linux内核编译——主要作用于操作系统层和硬件抽象层,即图中红色和绿色区域。开发者需要在宿主机(通常是x86 PC)上搭建交叉编译工具链,为目标ARM平台生成可执行的内核镜像和设备驱动。
1.6 嵌入式系统开发流程概览
一个典型的嵌入式Linux项目开发流程包含以下关键步骤,这也是本课程后续章节将要深入实践的内容:
- 需求分析与硬件选型:确定功能、性能、功耗、成本约束,选择ARM SoC及开发板。
- 搭建交叉编译环境:在宿主机上安装交叉编译工具链(如arm-linux-gnueabihf-gcc)。
- 配置与编译Bootloader:如U-Boot,负责硬件初始化和引导内核。
- 配置与编译Linux内核:根据目标板裁剪内核,编译生成zImage/uImage。
- 构建根文件系统:使用BusyBox或Buildroot制作最小根文件系统。
- 编写设备驱动:针对特定外设开发内核模块。
- 集成与烧录:将Bootloader、内核、设备树、文件系统烧录到目标板Flash。
- 调试与测试:通过串口、JTAG、网络等方式进行系统级调试。
常见误区提醒: 初学者容易混淆“交叉编译”与“本地编译”。在嵌入式开发中,由于目标ARM板资源有限(无足够内存和存储运行编译器),必须在性能强大的宿主机(x86 PC)上使用交叉编译器生成目标代码,再传输到目标板上运行。这是嵌入式Linux开发的基本范式,也是本课程第一讲就要建立的核心认知。