科技 > 操作系统 > 鸿蒙系统

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

171人参与 2024-08-04 鸿蒙系统


背景

在嵌入式场景中,虽然 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 statusname          assigned cpu      state          serviceuniproton     3                 offline
可以看到默认创建了一个 uniproton 实例,关联的 cpu id 为 3,状态为 offline。
通过 mica start <name>  启动实例:
raspberrypi4-64:~$ mica start uniprotonstarting uniproton...start uniproton successfully!

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

raspberrypi4-64:~$ mica statusname          assigned cpu      state          serviceuniproton     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 并回显# 例如,键入字符 chello, 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 uniprotonstopping uniproton...stop uniproton successfully!raspberrypi4-64:~$ mica statusname          assigned cpu      state          serviceuniproton     3                 offline
4. 销毁 rtos
通过 mica rm <name>  销毁实例:
raspberrypi4-64:~$ mica rm uniprotonremoving uniproton...rm uniproton successfully!raspberrypi4-64:~$ mica statusname          assigned cpu      state          service

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

加入我们

文中所述的特性支持,由 embedded sig 参与,相关源码均已在 openeuler 社区开源,可以参考下方链接进一步了解[4][5][6]。如果您对相关技术感兴趣,欢迎您的参加和加入。您可以添加小助手微信,加入 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 混合关键性部署框架介绍: h ttps://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

 


(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

素质教育新模式:后疫情时代教育 OMO 模式如何切实落地?

08-04

Kunpeng BoostKit 使能套件:大数据场景如何实现“大鹏一日同风起”倍级性能提升?

08-04

openEuler 社区签名体系建立

08-04

毕昇 JDK:“传奇再现”华为如何打造 ARM 上最好用的 JDK?

08-04

openEuler 24.03 LTS 特性解读 | 动态复合页

08-04

OERV-RTOS: UniProton 适配 Milk-V Duo,加速 openEuler RISC-V 生态

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论