MICA:面向复杂嵌入式系统的混合关键性部署框架

背景

在嵌入式场景中,虽然 Linux 已经得到了广泛应用,但并不能覆盖所有需求,例如高实时、高可靠、高安全的场合。这些场合往往是实时操作系统的用武之地。有些应用场景既需要 Linux 的管理能力、丰富的生态,又需要实时操作系统的高实时、高可靠、高安全。一种典型的设计是采用一颗性能较强的处理器运行 Linux 负责富功能,一颗微控制器/DSP/实时处理器运行实时操作系统负责实时控制或者信号处理,两者之间通过 I/O、网络或片外总线的形式通信。这种方式存在的问题是:硬件上需要两套系统、集成度不高,通信受限于片外物理机制的限制(如速度、时延等),软件上 Linux 和实时操作系统两者之间是割裂的,在灵活性上、可维护性上存在改进空间。

得益于集成电路技术与制造工艺的快速发展,嵌入式处理器硬件性能越来越强大。单核能力不断提升,单核正在向多核、异构多核乃至众核的方向演进,使得在一个片上系统(SoC)中部署多个 OS 具备了坚实的基础。

同时,受应用需求的推动,如物联网化、智能化、功能安全与信息安全的整合,嵌入式软件系统也越发复杂,由单一 OS 承载所有功能所面临的挑战越来越大。解决方式之一就是不同系统负责各自所擅长的功能,如 OpenHarmony 负责 UI、Linux 负责网络通信与管理、实时操作系统负责高实时与高可靠等,而且整个方案还要易于开发、部署、扩展,目前实现的形式可以是容器和虚拟化等技术。

面对上述硬件和应用的变化,OpenAtom openEuler(简称"openEuler") Embedded 提出了多 OS 混合关键性部署框架(MIxed CriticAlity,MICA),能够实现多 OS 高效混合部署,各尽其才,各取所需,满足嵌入式系统以功能、实时、功耗为代表的多目标约束。通过 MICA,实现 SoC 上融合部署、管理、协同多个 RTOS 能力。

图1 多 OS 混合部署框架

MICA 框架设计

MICA 主要包含以下功能:

1. 生命周期管理:针对不同的底座、架构提供统一的生命周期管理框架。

2. 跨 OS 通信:提供基于共享内存的、无锁的高效可扩展的通信机制,支持软、硬件多种实现方式。

3. 服务化框架:定义跨OS服务的注册管理框架,支持 tty 服务、gdb 服务、代理服务等。

图2 MICA 功能沙盘

MICA 引入了开源框架 OpenAMP 作为基础,并结合自身需要进一步创新。

图3 MICA 架构

在上述架构中,virtio-rpmsg 相当于网络协议中的 MAC 层,提供高效的底层通信机制,rpmsg 相当于网络协议中的传输层,提供了基于端点(endpoint)与通道(channel)抽象的通信机制,remoteproc 提供不同南向底座的生命周期管理功能,包括初始化、启动、暂停、结束等。

MICA 使用指导

MICA 主要包含三部分组件:

1. 内核模块:提供 RTOS 启动、专用中断收发、保留内存管理等功能。不同的部署模式会有对应的内核态实现,例如 bare-metal 部署模式,对应的内核模块是 mcs_km.ko。

2. micad:MICA 的守护进程。负责管理和控制 RTOS 实例的创建、运行及销毁。micad 监听来自于 mica 命令行工具的调用,并根据这些调用执行相应的操作。此外,micad 还负责不同实例上的服务注册等功能。

3. mica:MICA 的命令行工具。可以使用 mica 命令根据配置文件来创建、启动、停止 RTOS 实例,并且能够查看实例的状态和关联的服务信息。

下面介绍下基于 openEuler Embedded 树莓派4B的混合部署镜像介绍 MICA 的使用流程。

1. 镜像准备

下载树莓派4B的混合部署镜像[1],并按照树莓派 UEFI 启动指导[2]完成镜像的烧录和启动。

2. 部署 RTOS

镜像启动时默认会根据 /etc/mica/rpi4-uniproton.conf 创建 client OS 实例。可通过 mica status 查看该实例状态:

raspberrypi4-64:~$ mica status
Name          Assigned CPU      State          Service
uniproton     3                 Offline

可以看到默认创建了一个 uniproton 实例,关联的 CPU ID 为 3,状态为 Offline。

通过 mica start <Name>  启动实例:

raspberrypi4-64:~$ mica start uniproton
starting uniproton...
start uniproton successfully!

启动成功后,执行 mica status 查询状态及服务:​​​​​​​

raspberrypi4-64:~$ mica status
Name          Assigned CPU      State          Service
uniproton     3                 Running        rpmsg-tty(/dev/ttyRPMSG0) rpmsg-rpc

状态更新为 Running,并且能观察到该实例提供了两个服务:rpmsg-tty 以及 rpmsg-rpc。可以通过 screen /dev/ttyRPMSG0 打开 tty 设备来测试与 UniProton 的通信:

raspberrypi4-64:~$ screen /dev/ttyRPMSG0
# 回车后可以连上 UniProton
# UniProton 接收到终端键入的字符后,会转发回 Linux 并回显
# 例如,键入字符 C
Hello, UniProton! Recv: C

之后,可以通过 Ctrl-a k 或 Ctrl-a Ctrl-k 组合键退出 shell,可参考 Linux 使用手册-DEFAULT KEY BINDINGS 章节[3]。

3. 停止 RTOS

通过 mica stop <Name>  停止实例:

raspberrypi4-64:~$ mica stop uniproton
stopping uniproton...
stop uniproton successfully!
raspberrypi4-64:~$ mica status
Name          Assigned CPU      State          Service
uniproton     3                 Offline

4. 销毁 RTOS

raspberrypi4-64:~$ mica rm uniproton
removing uniproton...
rm uniproton successfully!
raspberrypi4-64:~$ mica status
Name          Assigned CPU      State          Service

通过 mica rm <Name>  销毁实例:

raspberrypi4-64:~$ mica rm uniproton
removing uniproton...
rm uniproton successfully!
raspberrypi4-64:~$ mica status
Name          Assigned CPU      State          Service

销毁实例后,可以执行 mica create rpi4-uniproton.conf 重新创建实例。

加入我们

文中所述的特性支持,由 Embedded SIG 参与,相关源码均已在 openEuler 社区开源,可以参考下方链接进一步了解[4][5][6]。如果您对相关技术感兴趣,欢迎您的参加和加入。您可以添加小助手vx:openeuler123,加入 SIG Embedded 微信群。

参考资料

[1] 树莓派 4B 的混合部署镜像下载地址:https://mirror.sjtu.edu.cn/openeuler/openEuler-24.03-LTS/embedded_img/aarch64/raspberrypi4-64-rt-hmi-mcs/

[2] 树莓派 UEFI 启动指导:https://yocto-meta-openeuler.pages.openeuler.org/master/bsp/arm64/raspberrypi4/uefi.html#raspberrypi4-uefi-guide

[3] Linux 使用手册-DEFAULT KEY BINDINGS 章节:https://man7.org/linux/man-pages/man1/screen.1.html#DEFAULT_KEY_BINDINGS

[4]openEuler Embedded 多 OS 混合关键性部署框架介绍:https://yocto-meta-openeuler.pages.openeuler.org/master/features/mica/index.html

[5] 在 ARM64 QEMU 上运行 MICA:https://yocto-meta-openeuler.pages.openeuler.org/master/features/mica/instruction.html#arm64-qemu

[6] mcs 代码仓库:https://gitee.com/openeuler/mcs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中scoped详解以及样式穿透>>>、/deep/、::v-deep

1、scoped scoped属性用于限制样式仅应用于当前组件。当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。 原理&#xff1a;当样式中加了scoped属性时候&#xff0c;编译的…

数据库解析一维和二维简易JSON,

项目还在使用Oracle11&#xff0c;不支持后续官方的json解析方式&#xff0c; 在 前年、去年、今年 接连 遇到json解析问题后&#xff08;其实是公司的轮子效率太慢&#xff0c;太复杂&#xff0c;决定自己造个轮子&#xff0c;看看到底为什么慢&#xff0c;是不是真的很复杂&a…

【最新】cudnn安装教程

最近换了新电脑需要重新安装cuda和cudnn&#xff0c;发现现在cudnn的安装比以前方便多了&#xff0c;直接在官网下载exe安装包一键运行即可。安装的时候注意cuda和cudnn的对应关系即可&#xff1a;【最新】cuda和cudnn和显卡驱动的对应关系-CSDN博客 访问cudnn下载链接cuDNN 9…

Git 基础 GitHub【学习笔记】

一、Git 优势 大部分操作在本地完成&#xff0c;不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅与 Linux 命令全面兼容 二、Git 程序安装 https://git-scm.com 三、Git 结构 #mermaid-svg-9Go6R1leWXWrDCqn {font-family:"trebuchet ms&quo…

运维锅总详解NFS

NFS是什么&#xff1f;如何对NFS进行部署及优化&#xff1f;NFS工作流程是什么&#xff1f;NFS的性能及优缺点是什么&#xff1f;NFS发展历史又是怎样的&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、NFS简介 NFS (Network File System) 是由 Sun Microsystems 在…

论文精读(保姆级解析)—— Flash Diffusion

0 前言 今天分析的论文是《Flash Diffusion: Accelerating Any Conditional Diffusion Model for Few Steps Image Generation》。该论文发表在2024年&#xff0c;目前已开源在arxiv上&#xff0c;主要提出了一种高效、快速且多功能的蒸馏方法&#xff0c;用于加速预训练扩散模…

[C++][STL源码剖析] 详解AVL树的实现

目录 1.概念 2.实现 2.1 初始化 2.2 插入 2.2.1 旋转&#xff08;重点&#xff09; 左单旋 右单旋 双旋 2.❗ 双旋后&#xff0c;对平衡因子的处理 2.3 判断测试 完整代码&#xff1a; 拓展&#xff1a;删除 1.概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但…

遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....

websocket 是一种双向通信协议&#xff0c;在建立连接后&#xff0c;websocket服务端和客户端都能主动向对方发送或者接收数据&#xff0c;而在http协议中&#xff0c;一个request只能有一个response&#xff0c;而且这个response也是被动的&#xff0c;不能主动发起。 websoc…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中&#xff0c;英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力&#xff0c;是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析&#xff0c;帮助你在保研面试…

LoRA:低秩自适应

LoRA:低秩自适应 本章节是对轻松上手微调大语言模型——QLORA篇中提到的LoRA的原理解释。 背后动机 现今模型的参数量变得越来越大&#xff0c;对预训练模型进行全微调变得越来越不可行。为了解决这个问题有了LoRA&#xff08;Low-Rank Adaption&#xff09;的诞生。将可训练…

Nginx制作下载站点

使用nginx制作一个类似nginx官网的下载站点 如何制作一个下载站点,首先需要ngx_http_autoindex_module模块 该模块处理以斜杠(“/”)结尾的请求&#xff0c;并生成目录列表。 nginx编译的时候会自动加载该模块&#xff0c;但是该模块默认是关闭的&#xff0c;需要使用下来指令…

3 FreeRTOS移植(从FREERTOS官网移植进自己的工程)

3 FreeRTOS移植 1 获取FreeRTOS源码&#xff08;熟悉&#xff09;1.1 介绍源码内容1.2 FreeRTOS内核1.2.1 Demo文件夹1.2.2 Source文件夹1.2.2.1 portable文件夹 2 FreeRTOS手把手移植&#xff08;掌握&#xff09;&#xff08;重要&#xff09;2.1 移植步骤 3 系统配置文件说明…

GraphHopper-map-navi_路径规划、导航(web前端页面版)

文章目录 一、项目地址二、踩坑环境三、问题记录3.1、graphhopper中地图问题3.1.1. getOpacity不存在的问题3.1.2. dispatchEvent不存在的问题3.1.3. vectorLayer.set(background-maplibre-layer, true)不存在set方法3.1.4. maplibre-gl.js.map不存在的问题3.1.5. Uncaught Ref…

学习记录:ESP32控制舵机 FREERTOS BLE

控制舵机 PWM信号 PWM信号是一种周期性变化的方波信号&#xff0c;它有两个关键参数&#xff1a; 周期&#xff08;Period&#xff09;&#xff1a;一个完整的PWM信号的时间长度&#xff0c;通常用秒&#xff08;s&#xff09;或毫秒&#xff08;ms&#xff09;表示。占空比…

FFmpeg解复用器如何从封装格式中解析出不同的音视频数据

目录 1、ffmpeg介绍 2、FFMPEG的目录结构 3、FFmpeg的格式封装与分离 3.1、数据结构 3.2、封装和分离(muxer和demuxer) 3.2.1、Demuxer流程 3.2.2、Muxer流程 4、总结 4.1、播放器 4.2、转码器 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续…

微服务上(黑马)

文章目录 微服务011 认识微服务1.1 单体架构1.2 微服务1.3 SpringCloud 2 微服务拆分2.1 熟悉黑马商城2.2 服务拆分原则2.2.1.什么时候拆2.2.2.怎么拆 2.3 拆分服务2.3.1 拆分商品管理功能模块2.3.2 拆分购物车功能模块 2.4 远程调用2.4.1 RestTemplate2.4.2.远程调用 2.5 总结…

顺序表算法题

在学习了顺序表专题后&#xff0c;了解的顺序表的结构以及相关概念后就可以来试着完成一些顺序表的算法题了&#xff0c;在本篇中将对三道顺序表相关的算法题进行讲解&#xff0c;希望能对你有所帮助&#xff0c;一起加油吧&#xff01;&#xff01;&#xff01; 1.移除元素 2…

nginx转发netty长链接(nginx负载tcp长链接配置)

首先要清楚一点&#xff0c;netty是长链接是tcp连接不同于http中负载在http中配置server监听。长连接需要开启nginx的stream模块(和http是并列关系) 安装nginx时注意开启stream&#xff0c;编译时加上参数 --with-stream &#xff08;其他参数根据自己所需来加&#xff09; …

脊髓损伤的小伙伴锻炼贴士

Hey小伙伴们~&#x1f44b; 今天要跟大家聊一个超燃又超温馨的话题&#xff01;&#x1f31f; 对于我们脊髓损伤的小伙伴们来说&#xff0c;保持身体活力&#xff0c;不仅是健康的小秘诀&#xff0c;更是拥抱美好生活的超能量哦&#xff01;&#x1f4aa; #脊髓损伤# 首先&…