总体介绍¶
对于当前的嵌入式系统,一方面由于硬件越来越强大,可以有力支撑运行像Linux这样复杂的操作系统;另一方面应用也变得越发复杂, 包含了越来越多的需求, 例如互联的需求、AI的需求、迭代升级的需求等等。面对复杂而繁多的需求,实践中也往往需要像Linux这样强大的操作系统来满足。因此,我们可以发现, 在嵌入式系统中,Linux所应用的场景越来越多,甚至在传统认为像Linux这样大型操作系统所不能胜任的领域,如传感器、工业控制、航空航天等,Linux的 身影也越发常见。但同时也必须认识到,嵌入式系统与一般的计算机系统的不同之处在于,其往往有资源限制、功耗限制、实时性、可靠性、安全性等方面的约束。 这些约束并没有随着系统的复杂化而变化。对于这些约束,受限于自身的复杂架构Linux并不能很好的满足, 而往往是以实时操作系统乃至裸金属运行时为代表的相对精简的专用系统的用武之地。
在上述背景下,openEuler Embedded旨在成为一个以Linux为中心的综合嵌入式软件平台。如上图所示,openEuler Embedded中各组成部分的关系类似于一个 “太阳系”。Linux作为整个星系的中心,提供丰富的生态与功能,而不同的运行时”行星“提供各具特色的功能, 如实时操作系统满足硬实时的需求、基于TEE技术的运行时保障信息安全、裸金属运行时可以实现极致性能、嵌入式虚拟化可以实现不同运行时之间隔离。openEuler Embedded以Linux丰富的生态与功能、混合关键性系统、 分布式软总线、基础设施等为“引力”把诸多的运行时“行星”与Linux有机地集成在一起。
openEuler Embedded的总体架构如下图所示:
以Linux为中心
openEuler Embedded当前主要支持了ARM64,x86-64二种架构,支持了RK3568, Hi3093,树莓派4B,x86-64工控机等具体硬件,初步支持了ARM32,RISC-V两种架构具体通过QEMU仿真来体现,openEuler Embedded的南向生态正在不断完善中。
融合弹性底座
openEuler Embedded的融合弹性底座是为了在多核片上系统(SoC,System On Chip)上实现多个操作系统/运行时共同运行的一系列技术的集合,包含了裸金属、嵌入式虚拟化、轻量级容器、LibOS、可信执行环境(TEE)、异构等多种实现形态。不同的形态有各自的特点,例如裸金属可以得到最佳的性能、嵌入式虚拟化可以实现更好的隔离与保护、轻量级容器则有更好的易用性与灵活性等等。
混合关键性部署框架
openEuler Embedded的混合关键性部署框架是构建在融合弹性底座之上,通过一套统一的框架屏蔽下层融合弹性底座形态的不同从而实现Linux和其他OS/运行时便捷地混合部署,依托硬件上的多核能力使得通用的Linux和专用的实时操作系统有效互补,从而达到全系统兼具两者的特点,并能够灵活开发、灵活部署。
混合关键性部署框架的组成主要有四大部分:生命周期管理、跨OS通信、服务化框架和多OS基础设施。生命周期管理主要负责从OS(Client OS)的加载、启动、暂停、结束等工作;跨OS通信为不同OS之间提供一套基于共享内存的高效通信机制;服务化框架是在跨OS通信基础之上便于不同OS提供各自擅长服务的框架,例如Linux提供通用的文件系统、网络服务,实时操作系统提供实时控制、实时计算等服务;多OS基础设施是从工程角度为把不同OS从工程上有机融合在一起的一系列机制,包括资源表达与分配,统一构建等功能。
高质量的Linux内核
openEuler Embedded的中心是Linux,当前采用了与openEuler其他场景相同的Linux 5.10内核,该版本内核最长支持周期为6年,未来也将与其他场景协同演进内核。在软件包层面也与内核一样和所有场景共代码、共演进,当前已经支持250+软件包,远期目标是支持尽可能多的openEuler社区软件包。
同时针对嵌入式场景的需求,openEuler Embedded会在内核特性、系统配置、快速启动、软件包组合、镜像裁剪、安全加固、轻量化等方面 进行创新,包括但不限于: 基于Preempt-RT补丁提供软实时能力、最小OS镜像<5M、小于<5S的快速启动能力 等。
混合部署框架
在嵌入式场景中,虽然Linux已经得到了广泛应用,但并不能覆盖所有需求,例如需要高实时、高可靠、高安全的场合。这些场合往往是以实时操作系统 为代表的专用系统的用武之地。在既需要Linux的管理能力、丰富的生态又需要实时操作系统的高实时特性的场合,传统的设计是一颗性能较强的处理器运行Linux, 一颗微控制器/DSP/实时处理器运行实时操作系统,两者之间通过I/O、网络或片外总线通信。现在随着硬件技术的快速发展,片上系统的集成度越来 越高,同时集成多核、乃至异构多核已经很常见,这就为在软件上同时部署多个OS的提供了物质基础。
openEuler Embedded的混合部署框架就是为了实现在一颗片上系统中同时部署多个OS而设计的,目的是通过一套框架实现Linux和其他OS便捷地混合部署,依托硬件 上的多核能力使得通用的Linux和专用的实时操作系统有效互补,从而达到全系统兼具两者的特点,并能够灵活开发、灵活部署。
嵌入式虚拟化
混合部署框架虽然可以解决Linux和实时操作系统的混合部署, 但也存在着Linux和实时操作系统之间未实现强隔离、静态部署资源利用率低等问题。嵌入式虚拟化 是解决这些的问题的途径之一。由于嵌入式场景的诸多约束,嵌入式虚拟化与以服务器、云计算为代表的通用虚拟化有着显著的不同,openEuler Embedded 正就嵌入式虚拟化相关技术积极布局,未来将推出相应的解决方案,有力支撑以混合关键性系统为代表的相关应用。
分布式软总线
欧拉和鸿蒙两大社区正积极合作,通过在openEuler Embedded中引入分布式软总线技术,使得鸿蒙设备和欧拉设备能够彼此互联互通,打通鸿蒙和欧拉两大生态。鸿蒙主要面向有强交互等需求的智能终端、物联网终端和工业终端,欧拉主要面向有高可靠、高性能等需求的服务器、边缘计算、云、嵌入式设备,二者各有侧重,通过以分布式软总线为代表的技术相互联通,可以实现“1+1>2”的效果。
工具体系
由于嵌入式系统资源受限,无法像通用系统那样方便地进行开发工作,因此非常依赖开发工具体系的支持。除了嵌入式Linux运行时外,openEuler Embedded的发布件中还包含能有力支持嵌入式开发工作的SDK(Software Development Kit),同时近期也会集成与openEuler Embedded配套嵌入式系统仿真方案,未来还计划集成图形化的IDE(Integrated Development Environment),最终形成一套相对完整的开发工具体系。
DFX体系
还是由于嵌入式系统资源受限,无法像通用系统那样方便地进行优化和调试。openEuler Embedded的维测体系为一个包含了针对嵌入式Linux的调试机制(Debug)、性能优化机制(Optimization)和追踪机制(Trace)在内的相关完善体系,旨在帮助开发者高效地完成相关工作。
统一构建系统
openEuler Embedded采用的面向嵌入式系统Yocto构建体系,而非openEuler服务器场景的OBS构建体系。虽然实现了内核和软件包在代码层面的共享,但在具体构建上有着巨大的差异,需要专门编写相应的构建文件,这也意味当前openEuler体系中众多软件包的构建规则不能直接应用于嵌入式场景。当前openEuler Embedded已经实现了250+软件包的支持,未来为了实现所有软件包的支持,显然不能把所有的软件包的构建在Yocto下重新实现一遍。因此,openEuler Embedded正在与其他场景共同努力,希望打造一套支持全场景的统一构建系统。
因此,openEuler Embedded正在与其他场景共同努力,希望打造一套支持全场景的统一构建系统,包括统一的软件包描述、面向构建的领域专用语言 和统一的执行引擎。一些初步的构想可以参考 基于Yocto的openEuler Embedded构建实践
南向生态
openEuler Embedded初步支持了在嵌入式系统广泛使用的ARM架构,包括arm32和arm64,并通过QEMU和树莓派4B两个平台承载。未来,openEuler Embedded将 支持更多的ARM架构平台,并逐步支持RISC-V、X86、龙芯等架构,不断丰富南向生态。
北向生态
openEuler Embedded的北向生态正在起步中,将会与openEuler的相关SIG组与社区伙伴合作不断完善,重点聚焦在工控、机器人、能源等场景。