# Mortise **Repository Path**: tenonos/mortise ## Basic Information - **Project Name**: Mortise - **Description**: 基于微库解耦架构的嵌入式虚拟化平台 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 3 - **Created**: 2024-06-04 - **Last Updated**: 2025-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: 虚拟化 ## README # Mortise:基于微库解耦架构的嵌入式虚拟化平台 [![Static Version Badge](https://img.shields.io/badge/Mortise_Version-v0.1.0-brightgreen)][moritse-latest] [![Static License Badge](https://img.shields.io/badge/License-Apache--2.0-green)][mortise-license] ![Static Language Badge](https://img.shields.io/badge/Language-C/C++-red) ## 项目介绍 Mortise是一款基于LibOS架构的嵌入式虚拟化平台,旨在与TenonOS和其他通用OS组合成混合关键性系统的解决方案,并通过LibOS架构灵活生成与目标场景最契合的Hypervisor。 ![arch](arch.svg) 现阶段Mortise版本以[Bao v1.0][bao-hypervisor]作为项目原型,重构为Tenon架构,做微库化解耦和复用,并持续扩展其他嵌入式虚拟化功能。 随着项目演进,将持续提高与TenonOS微库复用的程度。 ### 支持的平台 | 平台 | CPU架构 | 状态 | | ---------------------------------------------------------- | ------- | ------ | | [qemu-aarch64-virt](platform/qemu-aarch64-virt) | arm64 | 已支持 | | [xlnx-versal-virt](platform/qemu-aarch64-xlnx-versal-virt) | arm64 | 已支持 | | [rk3568](platform/rk3568) | arm64 | 已支持 | | [d9](platform/d9) | arm64 | 已支持 | ### 支持的GuestOS | OS | CPU架构 | 启动协议 | 状态 | | ------------------- | ------- | ------------------------------ | ------ | | TenonOS | arm64 | RAW/Linux 64-bit boot protocol | 已支持 | | Linux | arm64 | Linux 64-bit boot protocol | 已支持 | | 其他未修改的GuestOS | arm64 | RAW | 已支持 | ### 关键特性支持 * [x] 平台支持: 已验证qemu-aarch64/xlnx-versal模拟平台、rk3568、芯驰d9嵌入式板卡 * [x] GuestOS:支持Linux aarch64启动协议和RAW Binary格式的操作系统镜像 * [x] 支持静态分区配置:GuestOS之间CPU核心和内存静态分区隔离 * [x] 支持完全设备树配置Mortise * [x] 支持GuestOS数据块加载:设备树dtb、initrd镜像和其他任意数据镜像 * [x] hypercall微库框架:支持灵活扩展任意smccc hypercall * [x] shell微库框架:支持扩展命令行工具 * [x] 支持设备直通:支持MMIO、中断、IOMMU直通配置 * [x] 支持设备模拟:vgicv2/3 * [ ] vdev微库框架:支持扩展三方模拟设备驱动 ### 示例应用 目前Mortise提供多个组合支持的操作系统(TenonOS、Linux等)和平台的示例供参考,详情参阅[examples](examples/README.md) ## 如何使用 ### 代码结构 Mortise项目是基于Tenon框架API、微库和相关工具链构建而出的,代码按类似Tenon的组织方式。当前版本的Mortise主要支持静态配置能力,即虚拟化平台的配置和虚机配置均在构建阶段完成。 Mortise本身通过Kconfig来配置,Mortise运行的平台通过platform下板级支持包的[desc.c](platform/qemu-aarch64-virt/desc.c)配置,运行的虚机则通过独立[config.c](examples/demos/tenonos/configs/qemu-aarch64-virt.c)配置。 ``` . ├── arch /*架构相关的公共代码*/ ├── defconfigs /*存放一些支持平台的默认Kconfig*/ ├── doc /*存放一些指导文档*/ ├── drivers /*Mortise单独维护的驱动,一般不适用于TenonOS*/ ├── examples /*一些示例场景的配置、脚本和代码*/ ├── include /*架构无关的头文件*/ ├── lib /*Mortise项目的核心专用微库*/ ├── platform /*Mortise支持的平台和板级支持包*/ ├── tnplat /*用于将Mortise作为TenonOS平台构建的对接层*/ ├── tools /*项目的辅助工具代码*/ ``` ### 使用指导 Mortise基于Tenon的构建体系,使用make和Kconfig完成编译和配置工作,使用指导请参考[quick_start](doc/quick_start.md) 编译Mortise使用环境变量VM_CONFIG_FILE指定配置文件,示例如下: ``` make -j $(nproc) VM_CONFIG_FILE=/path/to/config.c ``` ## 社区贡献 Mortise欢迎各方以个人、组织、企业形式参与到社区贡献当中,贡献指导请参考[Contributing][mortise-contributing] ## 参考资源 * [设计文档][tenon-design] * [Tenon](tenon) * [Bao][bao-hypervisor] [moritse-latest]: https://gitee.com/tenonos/mortise/releases/tag/release-v0.1.0 [bao-hypervisor]: https://github.com/bao-project/bao-hypervisor [tenon-design]: https://gitee.com/tenonos/request-for-comments [tenon]: https://gitee.com/tenonos/tenon [mortise-license]: LICENSE.md [mortise-contributing]: https://gitee.com/tenonos/documents/tree/master/contributor/CONTRIBUTING.md