2)基于QEMU搭建KVM on ARM64的开发环境

KVM现在非常流行,多家主流云计算提供商已经用KVM取代了XEN作为云计算的默认hypervisor,所以我们有必要学习KVM的原理,特别是使用QEMU模拟的硬件来调试KVM,能达到事半功倍的效果。现在arm64的生态也越来越完善,对云计算提供商越来越有吸引力,特别是arm64 v8.1加入的VHE特性,虚拟化硬件架构上理论上比X86优越,以后前景看好。
下面我们介绍一下怎么使用QEMU来搭建KVM on ARM64的学习、调试环境。
主要思路是在X86主机上,使用QEMU来模拟(通过tcg方式)arm64的硬件(模拟实现了EL2),然后在主机上交叉编译linux内核,此内核打开KVM功能,然后在arm64硬件上安装新内核,此时KVM已经运行起来,然后就可以在arm64硬件上进行调试了。

  1. 参考基于QEMU搭建XEN on ARM64的开发环境,搭建基本的arm64 ubuntu环境。

  2. 备份ubuntu.qcow2。后续arm64虚拟机中会用到这个文件。

    cp ubuntu.qcow2 ubuntu.qcow2.bak
    
  3. 扩大磁盘空间,将扩大的空间加入文件系统中
    a. 利用qemu-img命令扩大虚拟磁盘空间

    qemu-img resize ubuntu.qcow2 +150G
    

    b. 启动arm64虚拟机

    qemu-system-aarch64 \
       -M virt,gic_version=3,virtualization=true,type=virt \
       -cpu cortex-a57 -nographic -smp 8 -m 8800  -bios QEMU_EFI.fd \
       -drive if=none,file=ubuntu.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
       -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0
    

    c.在arm64虚拟机中,生成新的分区表

    sudo fdisk /dev/vda
    

    按p显示当前分区表,使用d删除当前根分区,然后n新建根分区,w保存新分区表。
    kill qemu进程,然后再以相同的命令行启动arm64虚拟机。
    在arm64虚拟机中,将增大的空间加入ext4文件系统,执行:

    sudo resize2fs /dev/vda1
    
  4. 编译带有KVM功能的linux内核
    a. 在host上安装交叉编译环境,下载linux内核代码。请参考基于QEMU搭建XEN on ARM64的开发环境
    b. 编译linux内核,config文件在?

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make deb-pkg -j8
    
  5. 安装新内核
    a. 将之前交叉编译的新内核copy到arm64虚拟机中,新内核默认位置在源码的上一级目录

    scp -P2222 linux-image-4.19_4.19.0-1_arm64.deb john@localhost:~
    scp -P2222 linux-headers-4.19.0_4.19.0-1_arm64.deb  john@localhost:~
    

    b. 在arm64虚拟机中,安装新内核。注意,安装新内核的过程中会生成ramdisk,会比较耗时

    sudo dpkg -i linux-image-4.19_4.19.0-1_arm64.deb
    sudo dpkg -i linux-headers-4.19.0_4.19.0-1_arm64.deb
    

    c. 设置默认启动新安装的kernel

    sudo grub-set-default 0
    
  6. 重新启动arm64虚拟机,进入默认linux内核
    a. kill qemu进程,然后再以相同的命令行启动arm64虚拟机
    b. 检查KVM是否已经开启

    dmesg|grep -i kvm
    

    或者检查/dev/kvm是否存在

    ls /dev/kvm
    

至此我们已经拥有了一个kvm on arm64的开发环境,后面文章在此arm64虚机中继续搭建kvm开发环境。

你可能感兴趣的:(kvm,on,arm64,原创)