一、前言
随着嵌入式系统的发展,虚拟化和容器化技术是提升设备效能和灵活性重要手段。ZVM(Zephyr-based Virtual Machine)作为新一代Type 1.5 RTOS虚拟化解决方案(Hypervisor),为单芯片多OS和多任务处理提供了实时且灵活的支持。同时,ZVM也是openEuler Embedded混合关键性部署框架(MICA)的基础——融合弹性底座的一部分,并已终端控制方式合入openEuler Embedded(ZVM/openEuler Embedded架构如图1所示),相关文档可参考:
https://embedded.pages.openeuler.org/master/features/zvm.html

图1:ZVM/openEuler Embedded总体架构
本文将展示ZVM支撑openEuler Embedded运行iSulad容器的实现。
二、iSulad & openEuler Embedded

iSulad 是一个新的通用容器引擎,提供统一的架构设计来满足CT和IT领域的不同需求。它具有轻、快、易、灵的特点,这与子弹蚂蚁"小个头、大能量"的形象不谋而合。作为一款通用容器引擎,openEuler 已将其深度集成到其操作系统中。
iSulad结合openEuler Embedded轻量化和高性能特性,可为嵌入式设备、边缘计算节点及云原生场景提供高效、稳定的容器运行时支持,助力开发者快速构建和部署轻量化应用。
因此,ZVM+iSulad+openEuler Embedded,是一个具备实时性、强隔离性和安全性的解决方案。
三、实现方法
本处将展开介绍实现RK3568芯片上ZVM+iSulad+openEuler Embedded部署的过程,主要为构建openEuler Embedded镜像过程。
1.oebuild构建含iSulad的openEuler Embedded镜像
首先,oebuild是专门用于构建openEuler Embedded 系统的工具,利用了 Yocto的强大功能和灵活性的同时针对openEuler Embedded进行了优化。本文将在oebuild container中进行内核的配置与编译。前期准备可参考:https://embedded.pages.openeuler.org/master/oebuild/userguide/install/index.html
在oebuild中,可以一键式构建含容器的openEuler Embedded的系统,步骤如下:
初始化oebuild构建环境:
oebuild generate
#随后即进入图形界面进行配置
选择平台为ok3568
选择特性systemd
设置输出路径,此处为isulad

图2:图形界面配置
保存配置并退出后,应有如下图3所示输出,表示已经初始化完成构建路径

图3:初始化构建环境
当前openEuler Embedded标准镜像中默认不集成iSulad。可以进入容器在 local.conf 文件中添加iSulad配置。
oebuild bitbake
#添加 DISTRO_FEATURES:append = " isulad "vi conf/local.conf

图4:添加iSulad特性
于路径为build同级的src中,为yocto-meta-openeuler源码增加配置文件image-early-config-ok3568.inc,路径为:
src/yocto-meta-openeuler/meta-openeuler/recipes-core/images/
设置根文件系统为cpio.gz

图5:添加image-early-config配置
在直接构建完整镜像之前,可以先进行linux内核的配置
bitbake -c menucofig linux-openeuler
与本文相关的主要有:
#> General setup >Control Group support
CONFIG_CGROUPS=y
#> File systems >Overlay filesystem support
CONFIG_OVERLAY_FS=y
以及ARM v8.x特性需要关闭,如下图6。

图6:Linux menuconfig界面
bitbake openeuler-container-os
等待编译结束后,如图7所示,在输出路径中,可以找到ZVM启动Linux所需的Image以及含有iSulad的文件系统。

图7:系统镜像构建结果
2.编译RK3568平台的ZVM
本处无需做额外修改,只需获得上文所述的Image与cpio.gz文件即可,启动方式与ZVM启动其他Linux系统方式一致。请参考ZVM文档:
https://gitee.com/openeuler/zvm/blob/master/zvm_doc/4_Run_on_ROC_RK3568_PC.rst
四、ZVM启动openEuler Embedded+iSulad
ZVM启动openEuler Embedded虚拟机后,启动iSulad容器演示如下图8所示,容器镜像为openeuler:23.09

图8:ZVM启动openEuler Embedded&iSulad
