From e705bd94a98f78c1e01453fdb265f2501edf48d7 Mon Sep 17 00:00:00 2001
From: Charlie Xiong <1981639884@qq.com>
Date: Tue, 8 Oct 2024 10:08:19 +0800
Subject: [PATCH] Doc: update doc
Update README.md file for user.
Signed-off-by: Charlie Xiong <1981639884@qq.com>
---
README.md | 108 +++++++++++++++++++++++++++++
README.rst | 104 ---------------------------
zvm_doc/4_Run_on_ROC_RK3568_PC.rst | 2 -
zvm_doc/5_Join_us.rst | 48 -------------
zvm_doc/figure/QQCode.png | Bin 0 -> 752130 bytes
5 files changed, 108 insertions(+), 154 deletions(-)
create mode 100644 README.md
delete mode 100644 README.rst
delete mode 100644 zvm_doc/5_Join_us.rst
create mode 100644 zvm_doc/figure/QQCode.png
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..d4affcc80
--- /dev/null
+++ b/README.md
@@ -0,0 +1,108 @@
+# ZVM 开源文档
+
+[](LICENSE)
+
+ZVM项目是在开源实时操作系统 [Zephyr RTOS](https://github.com/zephyrproject-rtos/zephyr)(由Linux基金会托管)上构建的一款虚拟机管理器(Hypervisor),ZVM一方面继承了Zephyr RTOS的开源生态和特性,另一方面为业界提供了一个原创的面向嵌入式场景的开源虚拟化平台解决方案。
+
+ZVM由湖南大学教授、嵌入式与网络计算湖南省重点实验室主任谢国琪老师主导开发,这是一款面向嵌入式场景的开源、实时、安全、轻量及易用的虚拟机管理平台,致力于成为嵌入式领域的“Linux-KVM”,构建混合关键部署的开源生态。项目仓库中包含Zephyr RTOS内核、工具及虚拟化支持所需的一些代码,共同构成了ZVM的代码仓。
+
+## 架构设计
+
+ZVM面向高性能嵌入式计算环境,提供嵌入式平台上操作系统级别的资源隔离和共享服务。可用于各种应用和行业领域,如工业物联网、可穿戴设备、机器学习等。ZVM架构图如下所示:
+
+
+
+## 持续集成
+
+ZVM将持续支持多种虚拟机操作系统和底层硬件平台,拓展软硬件生态。
+
+#### 虚拟机操作系统
+
+ZVM支持的虚拟机操作系统列表如下, 包括:
+
+- Zephyr RTOS
+- openEuler Embedded
+- Debian
+- **欢迎您提交新的虚拟机OS支持到ZVM社区**
+
+#### 底层硬件平台
+
+ZVM 支持的平台如下, 包括多核的ARMv8平台:
+
+- QEMU ARM64 virt (qemu-max)
+- RK3568 SoC (roc_rk3568_pc/ok3568/lubancat2)
+- ARM Fixed platform (cortex-a55x4)
+- **欢迎您提交新的芯片支持到ZVM社区**
+
+## 视频介绍
+
+视频部分主要为ZVM在各类技术分享会议上的录屏,主要介绍了ZVM的架构和功能,方便用户快速了解ZVM。
+
+#### EOSS分享视频
+
+[ZVM: An Embedded Real-time Virtual Machine Based on Zephyr RTOS](https://mp.weixin.qq.com/s/igDKghI7CptV01wu9JrwRA)
+
+#### Sig-Zephyr分享视频
+
+[ZVM: 基于Zephyr RTOSI的嵌入式实时虚拟机](https://www.bilibili.com/video/BV1pe4y1A7o4/?spm_id_from=333.788.recommend_more_video.14&vd_source=64410f78d160e2b1870852fdc8e2e43a)
+
+## 快速上手ZVM
+
+#### 1. 系统简介 :
+
+系统介绍部分主要包含ZVM的总体涉及介绍以及基础的模块支持介绍,方便用户理解ZVM的设计思想和理念,详细内容见如下链接:[System_Design:https://gitee.com/openeuler/zvm/blob/master/zvm_doc/1_System_Design.rst](https://gitee.com/openeuler/zvm/blob/master/zvm_doc/1_System_Design.rst)
+
+#### 2. 开发环境搭建:
+
+环境搭建部分主要介绍Linux/Ubuntu主机开发环境的配置,包括主机各类环境变量的配置与升级、zephyrproject SDK的配置、环境验证、zvm仓库的初始化以及简单zvm sample的构建与测试等,方便用户快速入手搭建开发环境,详细内容见如下链接:[Environment_Configuration:https://gitee.com/openeuler/zvm/blob/master/zvm_doc/2_Environment_Configuration.rst](https://gitee.com/openeuler/zvm/blob/master/zvm_doc/2_Environment_Configuration.rst)
+
+#### 3. ZVM运行与测试:
+
+ZVM现在支持快速在qemu和rk3568板卡上进行验证,可以在上面运行多个虚拟机并进行虚拟化功能测试,下面是ZVM在各个平台上运行的详细教程:
+
+- [ZVM on QEMU:https://gitee.com/openeuler/zvm/blob/master/zvm_doc/3_Run_on_ARM64_QEMU.rst](https://gitee.com/openeuler/zvm/blob/master/zvm_doc/3_Run_on_ARM64_QEMU.rst)
+- [ZVM on RK3568:https://gitee.com/openeuler/zvm/blob/master/zvm_doc/4_Run_on_ROC_RK3568_PC.rst](https://gitee.com/openeuler/zvm/blob/master/zvm_doc/4_Run_on_ROC_RK3568_PC.rst)
+
+## 参与贡献
+
+ZVM作为Zephyr实时操作系统生态在国内的关键一环,致力于构建国内开源hypervisor生态,且正处于快速发展的时期,我们欢迎对ZVM及Zephyr感兴趣的小伙伴加入本项目。
+
+1. Fork 本仓库
+2. 新建 Feat_xxx 分支
+3. 提交代码
+4. 新建 Pull Request
+
+## 交流与反馈
+
+* 技术交流QQ群:如有相关问题可以加入ZVM开发者群进行交流;
+
+
+
ZVM开发者交流QQ群
+
+#### 研发团队:
+
+研发团队依托 [嵌入式与网络计算湖南省重点实验室](http://esnl.hnu.edu.cn/index.htm) 及 [车网智能融合技术研创中心](http://cyy.hnu.edu.cn/yjly1/cwznrhjs1.htm) 等平台,核心成员如下:
+
+**谢国琪教授**: [个人主页](http://csee.hnu.edu.cn/people/xieguoqi)
+
+**熊程来**,邮箱:xiongcl@hnu.edu.cn
+
+**胡星宇**,邮箱:huxingyu@hnu.edu.cn
+
+**王中甲**,邮箱:zjwang@hnu.edu.cn
+
+**韦东升**,邮箱:weidongsheng@hnu.edu.cn
+
+**赵思蓉**,邮箱:zhaosr@hnu.edu.cn
+
+**温浩**,邮箱:wenhao@stu.ynu.edu.cn
+
+**胡宇昊**,邮箱:ahui@hun.edu.cn
+
+**魏胜骏**,邮箱:weishengjun@hnu.edu.cn
+
+欢迎大家反馈开发中遇到的问题,可以联系上面邮箱或者加入技术交流群。
+
+## 版权与许可证
+
+ZVM使用 [zephyrproject-rtos](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fzephyrproject-rtos%2Fzephyr) 所遵守的 [Apache 2.0 许可证](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fzephyrproject-rtos%2Fzephyr%2Fblob%2Fmain%2FLICENSE) ,主要开发语言为C/C++语言。Apache 2.0许可证是一种自由软件许可证,允许用户自由使用、修改和分发软件, 不影响用户的商业使用。
diff --git a/README.rst b/README.rst
deleted file mode 100644
index 0e08366d5..000000000
--- a/README.rst
+++ /dev/null
@@ -1,104 +0,0 @@
-ZVM 开源文档
-==================
-
- 欢迎来到嵌入式实时虚拟机ZVM (Zephyr-based Virtual Machine) 项目的开发文档。
-
-ZVM项目是在开源实时操作系统 `Zephyr RTOS `__
-(由Linux基金会托管)上构建的一款虚拟机管理器(Hypervisor),ZVM一方面继承了Zephyr RTOS的开源生态和特性,
-另一方面为业界提供了一个原创的面向嵌入式场景的开源虚拟化平台解决方案。
-
-ZVM由湖南大学教授、 嵌入式与网络计算湖南省重点实验室主任谢国琪老师主导开发,这是一款面向嵌入式场景的
-开源、实时、安全、轻量及易用的虚拟机管理平台,致力于成为嵌入式领域的“Linux-KVM”,构建混合关键部署的开源生态。
-项目仓库中包含Zephyr RTOS内核、工具及虚拟化支持所需的一些代码,共同构成了ZVM的代码仓。
-
-ZVM使用 `zephyrproject-rtos `__ 所遵守的
-`Apache 2.0 许可证 `__
-,主要开发语言为C/C++语言。Apache 2.0许可证是一种自由软件许可证,允许用户自由使用、修改和分发软件,
-不影响用户的商业使用,因此可以直接作为商业软件发布和销售。
-
-
-ZVM特点
-------------------
-ZVM面向高性能嵌入式计算环境,提供嵌入式平台上操作系统级别的资源隔离和共享服务。可用于各种应用和行业领域,如工业物联网、可穿戴设备、机器学习等。
-ZVM架构图如下所示:
-
-.. figure:: https://gitee.com/openeuler/zvm/raw/master/zvm_doc/figure/overview.png
- :align: center
- :alt: zvm_demo
-
-
-虚拟机操作系统
-^^^^^^^^^^^^^^^^^^^^^^
-ZVM支持的虚拟机操作系统列表如下, 包括:
-
-- Zephyr RTOS
-- openEuler Embedded
-- Debian
-
-
-底层硬件平台
-^^^^^^^^^^^^^^^^^^^^^^
-ZVM 支持的平台如下, 包括多核的ARMv8平台:
-
-- QEMU ARM64 virt (qemu-max)
-- RK3568 SoC (roc_rk3568_pc/ok3568/lubancat2)
-- ARM Fixed platform (cortex-a55x4)
-
-
-
-文档目录
-------------------
-
-下面目录中包含ZVM系统介绍及系统的使用说明。
-
-具体内容及简介:
-^^^^^^^^^^^^^^
-
-`1.系统介绍 `__
-*****************************************************************************************************
-ZVM的架构及各个功能模块的介绍。
-
-`2.主机开发环境搭建 `__
-***************************************************************************************************************
-Linux/Ubuntu主机开发环境的配置,zephyrproject SDK的配置及zvm仓库的初始化和简单sample的构建与测试等。
-
-`3.在QEMU上运行ZVM `__
-********************************************************************************************************
-在QEMU ARM64上面运行ZVM的教程。
-
-`4.在RK3568上运行ZVM `__
-********************************************************************************************************
-在ROC_RK3568_PC上面运行ZVM的教程。
-
-`5.加入我们 `__
-********************************************************************************************************
-最后,我们介绍了我们团队的一些成员、如何加入ZVM进行开发以及开发过程中需要遵循的一些基本编码规则。
-以及为ZVM的后续发展制定了一些计划安排,你可以在这里找到它们。
-
-
-
-视频介绍
---------------------
-
-EOSS分享视频
-^^^^^^^^^^^^^^^^^^^^^^
-
-`ZVM: An Embedded Real-time Virtual Machine Based on Zephyr RTOS `__
-*************************************************************************************************************************************
-
-Sig-Zephyr分享视频
-^^^^^^^^^^^^^^^^^^^^^^
-
-`ZVM: 基于Zephyr RTOSI的嵌入式实时虚拟机 `__
-******************************************************************************************************************************************************************************************
-
-
-参与贡献
-^^^^^^^^^^^^^^^^^^^^^^
-ZVM作为Zephyr实时操作系统生态在国内的关键一环,致力于构建国内开源hypervisor生态,
-且正处于快速发展的时期,我们欢迎对ZVM及Zephyr感兴趣的小伙伴加入本项目。
-
-1. Fork 本仓库
-2. 新建 Feat_xxx 分支
-3. 提交代码
-4. 新建 Pull Request
diff --git a/zvm_doc/4_Run_on_ROC_RK3568_PC.rst b/zvm_doc/4_Run_on_ROC_RK3568_PC.rst
index dae3db108..94bf2b6f4 100644
--- a/zvm_doc/4_Run_on_ROC_RK3568_PC.rst
+++ b/zvm_doc/4_Run_on_ROC_RK3568_PC.rst
@@ -199,5 +199,3 @@ uart3: 用作主机shell控制
具体主机如何连接到串口uart3,需要看不同板卡的设计手册并自主引出串口线。
`Prev>> 在QEMU上运行ZVM `__
-
-`Next>> 加入我们 `__
diff --git a/zvm_doc/5_Join_us.rst b/zvm_doc/5_Join_us.rst
deleted file mode 100644
index 173b03a06..000000000
--- a/zvm_doc/5_Join_us.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-欢迎加入
-=============
-
-欢迎对ZVM及基于Zephyr感兴趣的小伙伴加入我们。
-
-团队介绍:
------------
-研发团队依托
-`嵌入式与网络计算湖南省重点实验室 `__ 及
-`车网智能融合技术研创中心 `__
-等平台。
-
-团队研发成员:
-~~~~~~~~~~~~~~~
-
-谢国琪教授: `个人主页 `__
-******************************************************************
-
-熊程来,邮箱:xiongcl@hnu.edu.cn
-******************************************************************
-
-胡星宇,邮箱:huxingyu@hnu.edu.cn
-******************************************************************
-
-王中甲,邮箱:zjwang@hnu.edu.cn
-******************************************************************
-
-韦东升,邮箱:weidongsheng@hnu.edu.cn
-******************************************************************
-
-赵思蓉,邮箱:zhaosr@hnu.edu.cn
-******************************************************************
-
-温浩,邮箱:wenhao@stu.ynu.edu.cn
-******************************************************************
-
-胡宇昊,邮箱:ahui@hun.edu.cn
-******************************************************************
-
-魏胜骏,邮箱:weishengjun@hnu.edu.cn
-******************************************************************
-
-
-问题反馈
---------
-欢迎大家反馈开发中遇到的问题,可以联系上面邮箱。
-
-`Prev>> 在RK3568上运行ZVM `__
diff --git a/zvm_doc/figure/QQCode.png b/zvm_doc/figure/QQCode.png
new file mode 100644
index 0000000000000000000000000000000000000000..6bef88954fd0d4433e82007b44febea0b7d41d2d
GIT binary patch
literal 752130
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