目前工控设备、航天设备、机器人系统、智能车系统对功能和生态的需求日益丰富,对实时性、可靠性、安全性提出了更高的要求,由单一OS承载所有功能面临的挑战越来越大。针对这些场景,我们提出了混合关键性系统(MCS, Mixed Criticality System),实现在一颗片上系统中部署多个OS,同时提供Linux的服务管理能力以及实时OS带来的高实时、高可靠的关键能力。
mcs_km: 提供OpenAMP所需内核模块,支持Client OS启动、专用中断收发、管理保留内存等功能。
mica: 包含命令行工具 mica 和守护进程 micad。用户通过 mica 命令进行 RTOS 的生命周期管理,包括:启动、停止以及查看状态等。micad 监听来自于 mica 命令行工具的调用,并根据这些调用执行相应的操作。此外,micad 还负责不同实例上的服务注册等功能。
library: 包含生命周期管理框架、服务化框架的具体实现。
rtos: 提供样例镜像文件,每一个 ELF 镜像都关联了对应的配置文件。具体的配置文件介绍请参考:mica命令与配置文件介绍。
mcs支持两种构建安装方式:
-
集成构建:通过yocto直接构建出包含mcs特性的镜像;
目前在 openEuler Embedded 版本中已经实现了mcs的集成构建,支持一键式构建出包含mcs的qemu、树莓派等镜像。集成构建依赖 oebuild 工具,具体请参考 openEuler Embedded 在线文档章节:混合关键性系统(MCS)镜像构建指导。
-
单独构建:单独编译mcs的各个组件,并将它们与相关的依赖库(libmetal.so*,libopen_amp.so*,libsysfs.so*)安装到运行环境中。
按照集成构建方法构建出带mcs特性的SDK后,可以使用SDK快速开发mcs,步骤如下:
-
根据openEuler Embedded使用手册安装SDK并设置SDK环境变量。
-
交叉编译内核模块 mcs_km.ko、mcs_remoteproc.ko,编译方式如下:
cd mcs_km make
将编译出来的 ko 放到运行环境的
/lib/modules/$(uname -r)
目录中,并执行以下命令:depmod echo "mcs_km" > /etc/modules-load.d/mcs_km.conf
-
交叉编译 micad,编译方式如下:
cmake -S . -B build ## 注:若希望构建带调试信息的二进制,请配置 CMAKE_BUILD_TYPE,例如: ## cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug cd build make
将编译出来的 micad 放到运行环境的
/usr/bin
目录中。为了支持 micad 的自启动,可以手动安装本仓库mica/micad/init
提供的启动脚本或systemd服务。 -
安装 mica 命令行工具和配置文件:
scp mica/micactl/mica.py target@xxx:/usr/bin/mica scp rtos/arm64/*.conf target@xxx:/etc/mica/
-
在SDK的 sysroots 中获取依赖库,包括 libmetal, libopen_amp, libsysfs,获取方式如下:
# 若sdk的安装路径为/opt/openeuler/sdk cd /opt/openeuler/sdk/sysroot find . -name libmetal.so* find . -name libopen_amp.so* find . -name libsysfs.so*
将以上so安装到运行环境中的
/usr/lib64
目录中。
-
目前mcs支持在qemu-arm64,树莓派4B,Hi3093,ok3568,x86工控机 等多个平台上运行,具体的使用方法,请参考混合关键性系统框架。