Skip to content

Latest commit

 

History

History
140 lines (86 loc) · 5 KB

README-zh.md

File metadata and controls

140 lines (86 loc) · 5 KB

README

README:中文 | English

本仓库包含附属于hvisor的命令行工具及内核模块,命令行工具中还包含了Virtio守护进程,用于提供Virtio设备。命令行工具以及内核模块需要单独编译后,在管理虚拟机root linux-zone0上使用。整个仓库结构为:

hvisor-tool
	-tools: 包含命令行工具以及Virtio守护进程
	-driver: hvisor对应的内核模块

编译步骤

以下操作均在x86主机的目录hvisor-tool下,进行交叉编译。

  • 编译命令行工具及内核模块
make all ARCH=<arch> LOG=<log> KDIR=/path/to/your-linux 

其中,<arch>应该为arm64riscv之一。

<log>LOG_TRACELOG_DEBUGLOG_INFOLOG_WARNLOG_ERRORLOG_FATAL之一,用来控制Virtio守护进程的日志输出等级。

/path/to/your-linux为root linux的kernel源码目录。具体的编译选项请见Makefiletools/Makefiledriver/Makefile

例如,要编译面向arm64的命令行工具,可以执行:

make all ARCH=arm64 LOG=LOG_WARN KDIR=~/linux

即可在tools/hvisordriver/hvisor.ko,将其复制到root linux的根文件系统,使用即可。

使用步骤

内核模块

使用命令行工具、Virtio守护进程之前,需要在zone0上加载内核模块,便于用户态程序与Hypervisor进行交互:

insmod hvisor.ko

卸载内核模块的操作为:

rmmod hvisor.ko

命令行工具

在root linux-zone0中,使用命令行工具可以创建、关闭其他虚拟机。

  • 启动新的虚拟机

    hvisor-tool通过一个配置文件启动一个新的虚拟机:

    ./hvisor zone start <vm_config.json>
    

    <vm_config.json>是描述一个虚拟机配置的文件,例如:

  • 关闭id为1的虚拟机:

./hvisor zone shutdown -id 1
  • 打印当前所有虚拟机的信息:
./hvisor zone list

Virtio守护进程

Virtio守护进程可为虚拟机提供Virtio MMIO设备,目前支持三种设备:Virtio-blk、Virtio-net和Virtio-console设备。

前置条件

要使用Virtio守护进程,需要在Root Linux的设备树中增加一个名为hvisor_device的节点,例如:

hvisor_device {
    compatible = "hvisor";
    interrupt-parent = <0x01>;
    interrupts = <0x00 0x20 0x01>;
};

这样,当hvisor向Root Linux注入中断号为32+0x20的中断时,便会进入hvisor.ko中注册的中断处理函数,唤醒Virtio守护进程。

Virtio设备的启动和创建

在Root Linux上,执行以下示例指令:

// 注意要先启动守护进程,再启动各个zones
nohup ./hvisor virtio start virtio_cfg.json &
./hvisor zone start <vm_config.json>

其中nohup ... &说明该命令会创建一个守护进程,且该进程的日志输出保存在当前文件夹下的nohup.out文件中。

virtio_cfg.json则是一个描述Virtio设备的JSON文件,例如virtio_cfg.json。该示例文件会依次执行:

  1. 地址空间映射

首先将id为1的虚拟机zone1的RAM内存区域通过mmap映射到Virtio守护进程的地址空间。

  1. 创建Virtio-blk设备

创建一个Virtio-blk设备,zone1会通过一片MMIO区域与该设备通信,这片MMIO区域的起始地址为0xa003c00,长度为0x200。同时设置设备中断号为78,对应磁盘镜像为rootfs2.ext4

  1. 创建Virtio-console设备

创建一个Virtio-console设备,用于zone1主串口的输出。root linux需要执行screen /dev/pts/x命令进入该虚拟控制台,其中x可通过nohup.out日志文件查看。

如要退回到主控制台,按下快捷键ctrl+a+d。如要再次进入虚拟控制台,执行screen -r [SID],其中SID为该screen会话的进程ID。

  1. 创建Virtio-net设备

由于net设备的status属性为disable,因此不会创建Virtio-net设备。如果net设备的status属性为enable,那么会创建一个Virtio-net设备,MMIO区域的起始地址为0xa003600,长度为0x200,设备中断号为75,MAC地址为00:16:3e:10:10:10,由id为1的虚拟机使用,连接到名为tap0的Tap设备。

关闭Virtio设备

执行该命令即可关闭Virtio守护进程及所有创建的设备:

pkill hvisor-virtio

更多信息,例如root linux的环境配置,可参考:在hvisor上使用Virtio设备