windows x86架构使用qemu安装部署arm架构的虚拟机

说明

windows x86架构安装部署arm架构的虚拟机。

准备

下载QEMU

https://qemu.weilnetz.de/w64/2022/qemu-w64-setup-20220831.exe

下载qemu启动项

Linaro Releases

下载网络驱动

TAP-Windows 9.21.2 - Download

安装qemu和tap驱动

qemu

直接双击安装,配置默认,安装位置可选择。我这装在D盘下。D:\Program Files\qemu

安装tap驱动

一路默认安装。C:\Program Files\TAP-Windows

装完可以看到PC网络适配器中多了个“以太网3”,这名字不重要,主要看到制造商是:“TAP-Windows Provider V9”。

安装虚拟机

efi准备

efi是启动时需要,在安装目录下创建一个efi目录,将下载的efi放进去,随后创建虚拟机指定bios会用到。

D:\qvm\

完成后可看到

D:\qvm\QEMU_EFI.fd

镜像准备

按照下边目录结构放好镜像,实际位置无所谓

D:\qvm\Kylin-Desktop-V10-Build1-20220402-arm64.iso

制作磁盘

制作一个磁盘,cmd打开,执行以下:

首先在安装目录下建立vm文件,用来放虚拟机文件,其中建立kylin10serversp1目录,该目录存储该虚拟机的所有文件。

D:\qvm>
qemu-img.exe create -f qcow2 d:/qvm/kylin_arm64.qcow2 80G

安装镜像

# 创建安装
qemu-system-aarch64.exe -m 8192 -cpu cortex-a72 -smp 8,sockets=4,cores=2 -M virt -bios D:\qvm\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=D:\qvm\kylin_arm64.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=D:\qvm\Kylin-Desktop-V10-Build1-20220402-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -net nic -net tap,ifname=tap0
​
# 启动
qemu-system-aarch64.exe -m 8192 -cpu cortex-a72 -smp 8,sockets=4,cores=2 -M virt -bios D:\qvm\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=D:\qvm\kylin_arm64.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 -device virtio-scsi-device -net nic -net tap,ifname=tap0

补充网络

在以上中tap设备加入了一个网卡在虚拟机,该tap网卡需要配置IP,如下。

本地无线网卡通信,则选择网络适配器 - 更多适配选项-共享(选择允许tap0共享此无线网络)

此时查看tap0 - 默认IP为192.168.137.1/24, 虚拟机内部网卡重激活后看到IP为192.168.137.212, 虚拟机内部ping baidu正常。

注意有时候虚拟机启动,连接外网又失效,此时按照以上步骤,将外网网卡共享重新开关一次。

tap网络通信原理说明

和其他虚拟机一样,比如VMware支持nat、网桥等模式,而qemu虚拟机也有类似支持的网络模式,包括如类似nat网络的user和tap网络等。

tap是一个虚拟网卡,是一个链路层的虚拟,类似的还有tun,这个不重要。重要的是它是一个虚拟网卡。这种一般用在如等场景。

虚拟网卡和物理网卡最大的区别是,

物理网卡:从外接网线进行网络流量的IO。

tap虚拟网卡:从指定用户层接口(比如某些应用程序,如的server程序)负责模拟外接的网线进行网络流量的IO。

以上二者网卡,收到流量的处理,在内核中是无处理差异的,该转发、共享或上应用处理都是一样的流程。

综上,tap虚拟网卡,一端被一个程序拿着(模拟外接的网线),一端被系统内核拿着。

在qemu使用的tap网络中,qemu这个程序就拿捏了tap虚拟网卡的模拟网线的一端,并且将这一端的模拟IO转换到虚拟机内部的虚拟网卡中反映出来。用下边的图简单示意下:

宿主机内核协议栈 ------io------- 宿主机tap -------io------ qemu ------io------虚拟机内部网卡 -------io-------虚拟机内核协议栈

上图中qemu就像个网线对接头,将断开的网线衔接上。从而打通网络。

这种类似的在linux还有veth-pair,实际就是实现两个网口是一对,在不同的名字空间下,实现跨容器(空间)的通信。

你可能感兴趣的:(笔记)