目录


kvmtool 项目介绍

kvmtool 是一个轻量级的 KVM guest 工具,可以轻量级的实现虚拟机的创建和启动,如果你被 qemu-kvm 的复杂难懂的折磨不已的时候,这绝对是一个不错的工具,对理解 kvm 原理和运行逻辑不错的选择。kvmtool 目前维护在 github 上,更多 kvmtool 信息可以参考:

Native Linux KVM tool on github

BiscuitOS 为 kvmtool 提供了一套完成的开发实践环境,开发者可以利用 BiscuitOS 快速部署 kvmtool 开发环境,并在 BiscuitOS 上使用 kvmtool 启动一个虚拟机。

kvmtool 项目实践


kvmtool 项目实践


实践准备

kvmtool 项目目前只支持 x86_64,本文以 x86_64 架构进行讲解,并推荐使用该架构来构建 kvmtool 项目。首先开发者基于 BiscuitOS 搭建一个 x86_64 架构的开发环境,请开发者参考如下文档:


实践部署

首先确认 Ubuntu 已经安装 KVM 模块,如果没有安装请在 Ubuntu 上安装相应的模块,使用如下命令:

sudo apt-get install -y qemu-kvm 
sudo apt-get install -y kvm
sudo modprobe kvm
sudo modprobe kvm-intel

在部署完毕开发环境之后, 由于需要在内核中支持 KVM 模块,因此开发者需要在内核配置中打开以下宏:

cd BiscuitOS/output/linux-5.0-x86_64/linux/linux
make ARCH=x86_64 menuconfig

  [*] Virtualization  --->
      <*> Kernel-based Virtual Machine (KVM) support
      <*>   KVM for Intel processors support

  [*] Device Drivers  --->
      [*] Virtio drivers  --->
          <*>   PCI driver for virtio devices
          [*]     Support for legacy virtio draft 0.9.X and older devices
      [*] Block devices  --->
          <*>   Virtio block driver

make ARCH=x86_64 bzImage -j4

重新编译内核,内核编译完毕并重新运行 BiscuitOS,可以在 “/dev/” 目录下看到 kvm 节点:

接下来是安装 kvmtool 源码,开发者可以参考如下命令进行部署:

cd BiscuitOS
make linux-5.0-x86_64_defconfig
make menuconfig 

  [*] Package  --->
      [*] KVM  --->
          [*] Native Linux KVM tool on BiscuitOS+  --->

make

配置保存并执行 make,执行完毕之后会在指定目录下部署开发所需的文件,并在该目录下执行如下命令进行源码的部署,请参考如下命令:

cd BiscuitOS/output/linux-5.0-x86_64/package/BiscuitOS-kvmtool-github
make download
make tar

执行完上面的命令之后,BiscuitOS 会自动部署所需的源码文件,如下图:

“BiscuitOS-kvmtool-github” 目录为 qemu-kvm 的源代码,目前采用 github 提供的版本; Makefile 为编译源码相关的脚本; RunBiscuitOS.sh 是在 BiscuitOS 是运行一个虚拟机的相关配置.


实践执行

部署完毕之后,接下来进行源码的编译和安装,并在 BiscuitOS 中运行. 参考如下代码:

cd BiscuitOS/output/linux-5.0-x86_64/package/BiscuitOS-kvmtool-github
make
make install
make pack
make run

如上图在 BiscuitOS 运行之后,可以查看 kvmtool 使用说明,以此确认软件已经可以使用.确认完毕之后,开发者可以使用两种办法启动一台虚拟机,默认使用 BiscuitOS 提供的脚本,也就是源码目录下的 RunBiscuitOS.sh, 其在 BiscuitOS 中使用如下:

RunBsicuitOS.sh

脚本运行完毕之后,BiscuitOS 根据 RunBiscuitOS.sh 的工作流启动一个虚拟机,虚拟机运行如上。当想退出虚拟机的话,使用 Ctrl-C 即可. 开发者也可以采用第二种方式启动虚拟机,第二种方式也就是命令行方式,但有一个需要开发者注意的是,命令行必须在 BiscuitOS 的 “/mnt/Freeze/BiscuitOS-kvmtool” 目录下执行,具体命令参考如下:

cd /mnt/Freeze/BiscuitOS-kvmtool

lkvm run --name BiscuitOS-kvm --cpus 2 --mem 128 --disk BiscuitOS.img --kernel bzImage --params "loglevel=3"

在 BiscuitOS 中当想退出虚拟机的话,使用 Ctrl-c 即可. 如果想退出 BiscuitOS 则使用 Ctrl-a x.


kvmtool 项目调试

kvmtool 的调试有很多种方法,这里主要介绍通过 LOG 日志的办法。kvmtool 的源码位于: 由于 kvmtool 是一个应用成员,因此可以使用调试应用程序的办法进行调试,最简单的办法就是 kvmtool 源码中使用 printf 进行打印调试.


附录

BiscuitOS Home

BiscuitOS Blog 2.0

Linux Kernel

Bootlin: Elixir Cross Referencer

捐赠一下吧 🙂

MMU