总体介绍

对于当前以及未来的嵌入式系统,一方面受益于“摩尔定律”,南向硬件的能力持续地越发强大,可以有力地支撑像Linux这样复杂的操作系统的运行;另一方面,北向应用也变得越发复杂, 包含了如互联互通、人工智能、人机交互、丰富的功能、持续迭代升级等越来越多的需求。 需求如此复杂而繁多,在工程实践中也往往需要像Linux这样强大的操作系统来满足。因此,在嵌入式系统中,Linux所应用的场景越来越多,甚至在传统认为像Linux这样的大型操作系统所不能胜任的领域,如传感器、工业控制、航空航天等领域,Linux的身影也越发常见。 但同时也必须认识到,与一般的以服务器、个人计算机为代表的通用计算机系统不同的是,嵌入式系统往往有资源限制、功耗限制、强实时性、高可靠性、强安全性等方面的约束,这些约束并没有随着系统的复杂化而变化。然而受限于自身的复杂而庞大的架构,以Linux为代表的大型通用操作系统 并不能很好地满足这些嵌入式系统中的约束。而以实时操作系统乃至裸金属运行时为代表的相对精简的专用系统,往往更有用武之地。

../_images/oee.png

openEuler Embedded概貌

在上述背景下,openEuler Embedded旨在成为一个以Linux为中心的综合嵌入式软件平台。如上图所示,openEuler Embedded中各组成部分的关系类似于一个“太阳系”的结构: 复杂而强大的Linux平台作为整个星系的中心,提供丰富的生态与功能、强大的基础设施,而不同的非Linux运行时“行星”则围绕着Linux这颗“太阳”提供各具特色的功能与生态,例如通过硬实时操作系统(Real-Time Operating System, RTOS)可以满足us级的硬实时的需求, 基于可信执行环境(Trusted Execution Environment, TEE)技术的运行时可以保障信息安全、与硬件紧密结合的裸金属运行时可以实现极致性能、借助硬件辅助的虚拟化技术嵌入式虚拟机可以实现不同运行时之间的高效隔离和灵活调度等。openEuler Embedded 以Linux丰富的生态与功能、重点构建的混合关键性系统、分布式软总线等关键特性、以及作为一个平台所必须的基础设施等为“引力”,把诸多的运行时与Linux有机地集成在一起。

openEuler Embedded的总体架构如下图所示:

../_images/oee_architecture.png

openEuler Embedded总体架构

  • 南向生态

openEuler Embedded当前主要支持ARM64、ARM32、x86-64、RISC-V等多种体系架构,支持海鸥派、RK3568/RK3588、Hi3093、树莓派4B、x86-64工控机等具体硬件。同时openEuler Embedded的南向生态依靠openEuler社区的力量仍然在不断完善中。

  • 融合弹性底座(FusionDock)

openEuler Embedded的融合弹性底座是为了在多核片上系统(SoC,System On Chip)上实现多个操作系统/运行时共同运行的一系列技术的集合,包含了裸金属、嵌入式虚拟化、轻量级容器、LibOS、可信执行环境(TEE)、异构等多种实现形态。不同的形态有各自的特点, 例如裸金属可以得到最佳的性能、嵌入式虚拟化可以实现运行时之间更好的隔离与保护、轻量级容器则有更好的易用性与灵活性等等。

  • 混合关键性部署框架(MICA)

openEuler Embedded的混合关键性部署框架(MI xed C ritic A lity, MICA)构建在融合弹性底座之上,通过一套统一的框架对下屏蔽融合弹性底座实现形态的不同、对上为运行时提供统一的接口,从而实现包含Linux和其他OS/运行时在内的多OS高效、便捷地 混合部署。依托硬件上的多核能力使得通用的Linux和专用的运行时例如实时操作系统彼此间形成有效互补,从而达到全系统兼具多种不同运行时的特点,并且能够灵活开发、灵活部署。

混合关键性部署框架的组成主要有四大部分: 生命周期管理跨OS通信服务化框架多OS基础设施。生命周期管理主要负责从OS(Client OS)的加载、启动、暂停、结束等工作;跨OS通信为不同OS之间提供一套基于共享内存的高效通信机制;服务化框架是在 跨OS通信基础之上便于不同OS提供各自擅长服务的框架,例如Linux提供通用的文件系统、网络服务,实时操作系统提供实时控制、实时计算等服务;多OS基础设施是从工程角度为把不同OS从工程上有机融合在一起的一系列机制,包括资源表达与分配,统一构建,跨多OS维测等功能。

  • 高质量的Linux内核

openEuler Embedded的中心是Linux,当前采用了与openEuler其他场景相同的,高质量的,openEuler Linux内核版本,目前支持5.10,6.6两大版本。在软件包层面也与内核一样和所有场景共代码、共演进,当前已经支持 800+ 软件包,远期目标是支持尽可能多的openEuler社区软件包。

同时针对嵌入式场景的需求,openEuler Embedded会在内核特性、系统配置、软件包组合、镜像裁剪等方面进行创新,包括但不限于 基于Preempt-RT补丁提供软实时能力、小型化(最小OS镜像<5 MB)、快速启动(启动时间小于<5S) 等。

  • 实时操作系统

对于嵌入式系统中的高可靠、高实时、高安全等需求,openEuler Embedded需要借助以实时操作系统为代表的相对精简的专用系统来实现。 openEuler Embedded对实时操作系统的选择是开放的,当前已适配Zephyr、RT-Thread、Uniproton、FreeRTOS等多种实时操作系统,可以实现和Linux的混合部署。

  • 分布式软总线

openEuler和OpenHarmony两大社区积极合作,通过在openEuler中引入分布式软总线技术,使得OpenHarmony设备和openEuler设备能够彼此互联互通,打通OpenHarmony和openEuler两大生态。OpenHarmony社区主要面向有强交互等需求的智能终端、物联网终端和工业终端等场景,openEuler社区主要 面向有高可靠、高性能等需求的服务器、边缘计算、云、嵌入式设备等场景,二者各有侧重,又彼此配合,通过以分布式软总线为代表的技术相互联通,可以实现“1+1>2”的效果。

  • 工具体系

由于嵌入式系统资源受限,无法像通用系统那样方便地进行开发工作,因此非常依赖开发工具体系的支持。除了嵌入式Linux运行时外,openEuler Embedded的发布件中还包含能够有力支持嵌入式开发工作的SDK(Software Development Kit),同时近期也会集成与openEuler Embedded配套嵌 入式系统仿真方案,未来还计划集成图形化的IDE(Integrated Development Environment),最终形成一套相对完整的开发工具体系。

  • 维测体系

针对嵌入式系统资源受限、无法像通用系统那样方便地进行优化和调试的现状,openEuler Embedded的维测体系是一个包含了针对嵌入式Linux的调试机制(Debug)、性能优化机制(Optimization)和追踪机制(Trace)在内的相关工具在内的的初步完善的体系,旨在帮助开发者高效地完成维测相关工作。

  • 基础设施

openEuler Embedded采用了面向嵌入式系统Yocto构建系统,而非openEuler服务器场景的OBS构建系统。虽然实现了与服务器场景在内核和软件包代码层面的共享,但在具体构建上有着巨大的差异,需要专门编写相应的构建配方文件,这也意味当前openEuler服务器场景中众多软件包的构建规则不能 直接应用于嵌入式场景。当前openEuler Embedded已经实现了800+软件包的支持,未来为了实现所有软件包的支持,显然不能把所有的软件包的构建在Yocto下重新实现一遍。因此,openEuler Embedded正在与其他场景共同努力,希望打造一套支持全场景的统一构建系统。

openEuler Embedded的CI/CD主要完成代码检查、门禁构建、每日构建、每周构建、发布构建等功能。

openEuler Embedded的测试框架主要配合CI/CD的流程,完成相应的测试工作,目前相关功能还比较简要,正在不断完善中。

  • 北向生态

openEuler Embedded的北向生态已经初具规模,并会与openEuler相关SIG组与社区伙伴持续合作不断完善,当前重点聚焦在工控、机器人、能源等OT(Operation Technology)场景,例如从openEuler 23.03开始,轻量级机器人运行时成为了openEuler Embedded关键特性之一。