本仓库包含附属于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>
应该为arm64
和riscv
之一。
<log>
为LOG_TRACE
、LOG_DEBUG
、LOG_INFO
、LOG_WARN
、LOG_ERROR
、LOG_FATAL
之一,用来控制Virtio守护进程的日志输出等级。
/path/to/your-linux
为root linux的kernel源码目录。具体的编译选项请见Makefile、tools/Makefile、driver/Makefile。
例如,要编译面向arm64
的命令行工具,可以执行:
make all ARCH=arm64 LOG=LOG_WARN KDIR=~/linux
即可在tools/hvisor
和driver/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>
是描述一个虚拟机配置的文件,例如:-
在QEMU-aarch64上启动zone1:使用该文件直接启动zone1时,需首先启动Virtio守护进程,对应的配置文件为virtio_cfg.json。
-
在NXP-aarch64上启动zone1:使用该文件直接启动zone1时,需首先启动Virtio守护进程,对应的配置文件为virtio_cfg.json。
-
-
关闭id为1的虚拟机:
./hvisor zone shutdown -id 1
- 打印当前所有虚拟机的信息:
./hvisor zone list
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守护进程。
在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。该示例文件会依次执行:
- 地址空间映射
首先将id为1的虚拟机zone1
的RAM内存区域通过mmap映射到Virtio守护进程的地址空间。
- 创建Virtio-blk设备
创建一个Virtio-blk设备,zone1
会通过一片MMIO区域与该设备通信,这片MMIO区域的起始地址为0xa003c00
,长度为0x200
。同时设置设备中断号为78,对应磁盘镜像为rootfs2.ext4
。
- 创建Virtio-console设备
创建一个Virtio-console设备,用于zone1
主串口的输出。root linux需要执行screen /dev/pts/x
命令进入该虚拟控制台,其中x
可通过nohup.out日志文件查看。
如要退回到主控制台,按下快捷键ctrl+a+d
。如要再次进入虚拟控制台,执行screen -r [SID]
,其中SID为该screen会话的进程ID。
- 创建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守护进程及所有创建的设备:
pkill hvisor-virtio
更多信息,例如root linux的环境配置,可参考:在hvisor上使用Virtio设备