软考中级嵌入式——第二章 嵌入式系统软件
摘要:本文系统介绍了嵌入式软件的基础知识,包括其特点(规模小、开发难度大、硬件资源有限)、分类(系统/应用/支撑软件)和体系结构(无OS/有OS阶段)。重点阐述了五层架构模型(硬件层至应用层)及各层功能,详细解析了设备驱动层(BSP、BootLoader)和中间件的作用。同时,深入探讨了嵌入式操作系统的概念、特点(小型化、实时性、可裁剪)和分类方式(实时性、内核架构、商业模式),列举了主流RTOS
1.嵌入式软件基础
1.1嵌入式软件概述
-
嵌入式软件的特点:
-
规模较小
-
开发难度大
-
硬件资源有限
-
嵌入式软件一般涉及到底层软件的开发,需要软硬件基础
-
开发环境和运行环境不同
-
-
实时性和可靠性要求高。如火箭飞行控制、核电站
-
要求固化存储
-
1.2嵌入式软件分类
-
按照通常的分类方法,嵌入式软件可以分为系统软件、应用软件和支撑软件三大类。
-
系统软件:
-
控制和管理嵌入式系统资源,包括设备驱动程序、嵌入式操作系统、嵌入式中间件等
-
-
应用软件
-
上层软件,定义设备主要功能和用途,负责与用户交互,如飞行控制软件、手机软件等
-
-
支撑软件
-
辅助软件开发的工具软件,如系统分析设计工具、在线仿真工具、交叉编译器等
-
1.3嵌入式软件的体系结构
1.3.1无操作系统阶段
-
程序直接在硬件上运行,没有操作系统层。开发者需要直接操作寄存器、中断向量表和硬件外设,对硬件细节有完全的控制权。
-
两种实现方式:
-
循环轮转
-
所有任务在一个无限循环中顺序执行,结构简单但实时性较差,适合功能单一的场景。
-
-
前后台系统(在循环轮转的基础上增加了中断处理)
-
在轮询基础上增加中断机制,前台处理紧急事件(中断),后台处理常规任务(主循环)。
-
-
1.3.2有操作系统阶段
-
开发应用程序不再直接面对嵌入式硬件设备,而是在操作系统的基础上编写,优点有:
-
提高系统的可靠性
-
提高了系统的开发效率,降低了开发成本,缩短了开发周期
-
可以按照软件工程的思想,将程序分解成多个任务模块,每个任务模块的调试、修改几乎不影响其他模块。
-
商业软件提供了良好的多任务调试环境
-
-
有利于系统的扩展与移植
-
1.3.3五层架构模型
-
硬件层 (Hardware)——微处理器、存储器、外设
-
提供嵌入式系统的物理基础,包括微处理器(MCU/MPU)、存储器(Flash/RAM)、I/O接口、定时器、通信接口等。这一层决定了系统的计算能力、功耗特性和成本基础。
-
-
硬件驱动层 (Driver)——驱动程序、板级支持包 BSP
-
将硬件细节封装,向上层提供统一的API接口。HAL使上层软件无需关心具体硬件型号,只需调用标准化接口即可操作硬件资源,极大提升了代码的可移植性。
-
-
操作系统层 (RTOS/OS)——任务调度与资源管理
-
负责任务调度、内存管理、中断处理、同步机制等核心功能。实时操作系统(RTOS)提供确定性响应,满足嵌入式系统对时效性的严格要求。
-
-
中间件层 (Middleware)——通信机制与资源共享
-
提供通用的软件服务,如网络协议栈、文件系统、数据库、图形界面等。中间件屏蔽了底层复杂性,让应用开发者专注于业务逻辑实现。
-
-
应用层 (APL)——业务逻辑与用户交互
-
实现具体的业务功能,如数据采集、控制算法、用户界面、通信协议等。应用层直接面向产品需求,是体现产品价值的核心代码层。
-
1.4设备驱动层
1.4.1板级支持包BSP
-
一般BSP主要包括两个方面的内容:
-
引导加载程序Boot Loader
-
设备驱动程序
-
1.4.1.1引导加载程序Boot Loader
-
引导加载程序Boot Loader 是嵌入式系统加电后运行的第一段软件代码,是在操作系统内核运行之前的一段小程序
-
通过这段程序,可以初始化硬件设备、建立内存空间的映射图
-
将系统的软硬件环境设置到一个合适的状态,为最终调用操作系统内核做准备
-
-
Boot Loader的实现高度依赖具体的硬件平台,主要的基本功能如下:
-
片级初始化
-
主要完成微处理器的初始化
-
包括设置微处理器的核心寄存器和控制寄存器、微处理器的核心工作模式、局部总线模式等
-
把微处理器从上电的默认状态设置成系统要求的工作状态
-
纯硬件初始化过程
-
-
板级初始化
-
设置各种硬件寄存器来完成微处理器以外的其他硬件设备的初始化
-
设置某些软件的数据结构和参数
-
同时有软件和硬件的初始化过程
-
-
加载内核
-
将操作系统和应用程序的映象从flash存储器复制到系统内存中
-
然后跳转到系统内核的第一条指令处继续执行
-
-
1.4.1.2设备驱动程序
-
在一个嵌入式系统中,操作系统可能有也可能无,设备驱动程序是必不可少的。
-
设备驱动程序,是一组库函数,用来对硬件进行初始化和管理,并向上层软件提供良好的访问接口
-
大多数设备驱动程序都具备下面的基本功能:
-
启动、关闭、停用、启用、读操作、写操作
-
-
设备驱动程序的组织结构
-
特定的功能一般用函数的形式来实现,这些函数之间的组织结构主要有两种:
-
分层结构
-
混合结构
-
-
-
分层结构:把设备驱动程序中的函数分为硬件接口函数和调用接口函数
-
硬件接口:直接操作和控制硬件
-
上层接口:为上层软件提供服务和函数接口。不直接和硬件打交道,会调用硬件接口中的函数
-
优点:把所有与硬件相关的细节都封装在硬件接口中,在硬件需要升级需要更新设备驱动程序的时候,只需要改动硬件接口中的函数即可,而上层调用接口中的函数不用做任何修改。
-
-
混合结构:
-
在设备驱动程序当中,没有明确的层次关系
-
上层接口和硬件接口函数混在一起,互相调用
-
1.5嵌入式中间件
-
中间件:在操作系统内核、设备驱动程序和应用软件之外的所有系统软件
-
基本思路:
-
把原本属于应用软件层的一些通用的功能模块抽取出来,形成独立的一层软件,从而为运行在它上面的哪些应用软件提供一个灵活、安全、移植性好、互相通信、协同工作的平台
-
-
特点:
-
可以有效地实现软件的可重用,降低应用软件的复杂性,提高系统的开发效率,缩短开发周期,节约开发成本和维护费用,保证了系统的高伸缩性、易升级性、稳定性。
-
但会带来额外的开销
-
-
嵌入式中间件可以分为不同类型,如消息中间件、对象中间件、远程过程调用、数据库访问中间件、安全中间件等
1.6嵌入式软件的运行流程
-
基于多任务操作系统的嵌入式软件的主要运行流程
-
上电复位、板级初始化阶段
-
系统引导、升级阶段
-
系统初始化阶段
-
应用初始化阶段
-
多任务应用运行阶段
-
2.嵌入式操作系统概述
2.1嵌入式操作系统的基本概念
-
嵌入式操作系统(Embedded Operating System,EOS)是一种专为嵌入式系统设计的系统软件,负责全面管理和调度嵌入式系统中的软硬件资源。与通用操作系统不同,EOS通常具有小型化、高实时性、可裁剪性、低功耗等核心特征,以适应嵌入式设备对成本、功耗和可靠性的严格要求
-
嵌入式操作系统的特点
-
非通用型操作系统
-
资源占用极小:这是最显著的特点。为适应资源受限的硬件,嵌入式操作系统的内核设计得非常小巧。例如,像 FreeRTOS 这样的操作系统内核通常只需要几KB(千字节)的内存;而更极致的如 embOS,其最小只读存储器(ROM)占用仅为 1KB,随机存取存储器(RAM)占用仅为 30字节。
-
实时性强:许多嵌入式应用(如工业控制、自动驾驶)对任务响应时间有严格要求。嵌入式操作系统能够提供确定的、可预测的响应,确保关键任务在规定时限内完成。根据响应时间的要求,可以分为硬实时系统(响应时间通常在几十毫秒以内)和软实时系统(响应时间在几百毫秒)。
-
可裁剪与模块化:嵌入式操作系统通常采用模块化设计,允许开发者根据具体应用需求,只选择必要的功能组件(如文件系统、网络协议栈、图形界面等)进行组合或裁剪,从而在满足功能的前提下,最大限度地缩减系统体积和成本。
-
能源、成本和可靠性通常是影响设计的重要因素
-
-
不同的操作系统包含的组件不同,但所有操作系统都会有一个内核(kernel)
-
内核是指操作系统中的一个组件,它包含了OS的主要功能,即OS的各种特性及其相互之间的依赖关系:
-
任务管理
-
存储管理
-
设备管理
-
文件管理
-
-
不同的嵌入式操作系统的内核设计不同,不一定包含所有的4个功能模块
2.2嵌入式操作系统的分类
2.2.1按实时性分类
-
这是最核心、最常用的分类标准,直接决定了系统适用于哪种任务类型。
类型 核心特点 典型代表 典型应用 硬实时系统 任务必须在绝对确定的截止时间内完成,任何超时都视为系统错误甚至故障。响应时间通常在微秒到毫秒级。 VxWorks, QNX, FreeRTOS (配置为硬实时模式), ThreadX 汽车安全气囊、飞机飞行控制、医疗心脏起搏器、工业机器人 软实时系统 任务大多数情况下能在截止时间内完成,但偶尔的超时不会被视为致命错误,仅可能导致服务质量下降。 标准Linux (经过PREEMPT_RT补丁后可达硬实时级别), Windows Embedded 音视频播放、手机用户界面、网络数据包处理 非实时系统 没有时间截止要求,任务按分时调度,响应时间不可预测。 早期的简单轮询系统(裸机) 简单的玩具、电子计算器
-
如何选择:
-
如果你的设备涉及安全、运动、医疗等对时间极其敏感的领域,必须选择硬实时系统。
-
而消费电子中的UI交互、媒体播放等,软实时通常就足够了。
-
2.2.2按内核架构分类
-
内核架构决定了系统的稳定性、扩展性和开发复杂度。
架构 核心特点 优点 缺点 典型代表 宏内核 操作系统内核的所有功能(任务调度、内存管理、文件系统、驱动等)都编译在一个大内核中,运行在单一地址空间。 内部函数调用效率高,性能好。 任何一个模块(尤其是驱动)崩溃都可能导致整个系统崩溃;扩展性稍差。 嵌入式Linux, 传统的μC/OS-II 微内核 内核只保留最核心功能(任务调度、内存管理、进程间通信),其他功能(驱动、文件系统、网络协议栈)都作为独立的用户态服务运行。 高可靠性(单个服务崩溃可重启而不影响内核)、高安全性、易于扩展和移植。 服务间频繁的进程间通信(IPC)会带来一定性能开销。 QNX, L4, 现代版Symbian 混合内核 / 模块化内核 实际的折衷方案。内核仍以宏内核为核心,但允许在运行时动态加载/卸载功能模块(如驱动程序)。 兼顾宏内核的性能和微内核的灵活性,是目前最主流的设计。 驱动的崩溃理论上仍可能带崩内核(如果驱动运行在内核空间)。 嵌入式Linux (支持内核模块), Windows NT系列 (含Windows Embedded) -
如何选择:
-
追求极致安全与稳定(如医疗、无人驾驶),首选微内核(如QNX)。
-
追求高性能和丰富的功能(如智能设备、路由器),宏内核或混合内核(如嵌入式Linux)是更实际的选择。
-
2.2.3按应用领域与商业模式分类
这是从开发者的实际接触角度进行的分类。
| 类别 | 特点 | 授权方式 | 典型代表 | 适合人群/场景 |
| 开源/自由RTOS | 代码完全开放,可免费用于商业产品,社区活跃,资料丰富。 | GPL, MIT, Apache等开源协议 | FreeRTOS, RT-Thread, Zephyr, LiteOS | 初创公司、个人开发者、学习研究、成本敏感的项目 |
| 商业闭源RTOS | 专业公司开发维护,提供完整的技术支持、认证服务(如功能安全ISO 26262),代码不可见或需付费获取。 | 商业许可证,需要支付授权费或版税 | VxWorks, QNX, ThreadX (微软收购后部分开放), μC/OS (原为商业,后开源) | 汽车、航空航天、军工、医疗等对安全和可靠性要求极高、预算充足的领域 |
| 嵌入式Linux发行版 | 基于Linux内核,针对嵌入式环境裁剪和定制,生态极为庞大。 | GPL等开源协议 (核心部分) | Yocto Project, Buildroot, OpenWrt, Android (基于Linux) | 几乎所有需要复杂功能、网络通信、图形界面的中高端嵌入式设备 |
如何选择:
-
学习入门:首选 FreeRTOS 或 RT-Thread,社区活跃,资料众多。
-
商业低成本项目:FreeRTOS (MIT许可证,非常宽松) 或 RT-Thread (Apache许可证,同样宽松) 是绝佳选择。
-
商业高安全/高认证项目:预算足够则选 VxWorks 或 QNX;预算有限可考虑已获安全认证的开源方案(如 RT-Thread Smart 的相关认证版)。
-
复杂功能项目:需要摄像头、触摸屏、完整的网络浏览器、AI算法库等,几乎只能选择嵌入式Linux。
2.3常见的嵌入式操作系统
2.3.1实时操作系统(RTOS)
| 操作系统 | 开源/商业 | 关键特征 | 典型应用 |
| FreeRTOS | 开源 | 市场占有率极高,内核小巧(KB级),支持大量MCU架构,被AWS收购 | 消费电子、物联网设备、电机控制 |
| RT-Thread | 开源 | 国产RTOS,组件丰富(软件包生态),支持SMP多核,最小内核4KB ROM | 工业控制、智能家居、国产化项目 |
| Zephyr | 开源 | Linux基金会托管,微内核风格,内置内存保护和SBOM安全特性 | 物联网安全设备、蓝牙/WiFi接入点 |
| VxWorks | 商业 | 微秒级确定性响应,功能安全认证齐全,可靠性极高 | 火星探测器、战斗机、工业机器人 |
| QNX | 商业 | 微内核架构,驱动/服务用户态运行,天然容错,已通过ISO 26262最高等级 | 汽车数字仪表盘、医疗设备、轨道交通 |
| ThreadX | 开源(Azure RTOS) | 硬实时,通过SIL4/ASIL D认证,部署设备超120亿台 | 汽车、航空航天、打印机 |
| µC/OS (II/III) | 开源(原商业) | 源码经典,文档丰富,曾获FAA认证 | 教学研究、安全关键系统(旧项目) |
| LiteOS | 开源 | 华为出品,最小6KB,极低功耗Tickless机制,鸿蒙内核基石 | 华为IoT设备、智能传感器 |
| Mbed OS | 开源 | ARM主导,深度集成ARM Cortex-M生态,内置安全套件 | 物联网原型开发、ARM MCU项目 |
| RIOT | 开源 | 类Linux API但资源占用极低(最小1.5KB RAM),支持C++ | 物联网端侧节点、无线传感器网络 |
| SylixOS | 商业(国产) | 大型RTOS,兼容POSIX,支持SMP,O(1)任务调度,用于轨道交通/国防 | 工业控制、国防装备 |
2.3.2分时操作系统
| 操作系统 | 开源/商业 | 关键特征 | 典型应用 |
| 嵌入式Linux | 开源 | 基于Linux内核裁剪,支持多任务、网络、GUI、海量驱动和中间件,是嵌入式分时系统的绝对主流 | 路由器、智能家居中控、车载信息娱乐、工业HMI |
| Android | 开源(AOSP) | 基于Linux内核,专为移动/嵌入式设备定制的完整软件栈 | 智能手机、平板、智能电视、车载系统 |
| OpenWrt | 开源 | 专为嵌入式网络设备(无线路由器)优化的Linux发行版,包管理强大 | 路由器、网关、物联网接入点 |
| Yocto Project | 开源 | 不是单一OS,而是一个定制嵌入式Linux的工具集,可构建最小化分时系统 | 各类需要定制Linux的工业/消费嵌入式产品 |
| Windows Embedded | 商业 | 微软嵌入式产品线(如Windows Embedded Compact/Standard),模块化,支持x86/ARM | 工业平板、POS机、瘦客户机 |
| HarmonyOS(鸿蒙) | 开源 | 分布式架构,当运行在大型设备(手机、车机)时底层使用Linux内核,表现出分时特性 | 手机、平板、车机、智慧屏 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)