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内核,表现出分时特性 手机、平板、车机、智慧屏

      Logo

      openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

      更多推荐