Skip to Main Content

ARM KVM安装Win10 ARM64系统

使用感受


  • 使用感受 :网络支持不完善,开机关机30秒内可完成,无显卡驱动。流畅谈不上,但响应及时不是很卡。

  • 网络也可通过 KDNET 内核调试来打开

浏览器上网效果

教程开始


1. 下载Win10 ARM64位系统 itellyou 镜像站

最好是下载Win10系统,Win11会检测TPM(可以百度自行解决)。

2. 下载 RedHaV 提供的 Virtio-win 的驱动镜像文件。

所需下载的文件

3, 把得到的Win10系统和Virtio-win驱动文件拷贝到同一文件夹下备用

备用文件层级

4, 创建一个至少12G的qemu磁盘文件,安装完系统占用最少12G以上,命令如下:

qemu-img create -f vhdx -o subformat=fixed system.vhdx 20G

使用 qemu-img 工具创建一个名为 system.vhdx 的新的 VHDX 格式的虚拟磁盘映像文件,该文件的大小为 20GB 。

启动Qemu虚拟机并使用KVM来加速

注意:

如果出现报错为

Could not open option rom 'vgabios-ramfb.bin': No such file or directory
qemu-system-aarch64: virtio-blk failed to set guest notifier (-11), ensure -accel kvm is set.
qemu-system-aarch64: virtio_bus_start_ioeventfd: failed. Fallback to userspace (slower).
qemu-system-aarch64: ../../hw/pci/msix.c:622: msix_unset_vector_notifiers: Assertion `dev->msix_vector_use_notifier && dev->msix_vector_release_notifier' failed.

则需要附加安装 qume 所需依赖的包,安装命令为:

sudo apt install seabios ipxe-qemu qemu -y

KVM的加速只能在同架构虚拟不同系统上起作用,如:Debian ARM64平台的KVM能加速同为ARM平台的Win10 ARM64或Centos ARM64,不能加速Win10 x86或Linux x64等

sudo qemu-system-aarch64 \
-M virt-2.12 -smp 4 -m 3G -cpu host -enable-kvm \
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -device ramfb \
-device qemu-xhci,id=xhci -usb \
-device usb-kbd -device usb-mouse -device usb-tablet -k en-us \
-device virtio-blk,drive=system \
-drive if=none,id=system,format=raw,media=disk,file=system.vhdx \
-device usb-storage,drive=install \
-drive if=none,id=install,format=raw,media=cdrom,file=/home/pi/Win10/2004.iso \
-device usb-storage,drive=drivers \
-drive if=none,id=drivers,media=cdrom,file=/home/pi/Win10/virtio-win.iso \
-device virtio-net,disable-legacy=on,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::5555-:3389 -vnc :1

使用 QEMU 在 ARM 64 位架构上模拟一个虚拟机,并配置其硬件设置(包括 CPU、内存、磁盘、网络等),同时加载 Windows 10 的安装 ISO 和其他必要的驱动程序 ISO,以便在虚拟机中安装或运行 Windows 10 操作系统。


命令解析

源码解释
sudo qemu-system-aarch64 \以超级用户权限运行 QEMU ARM64 系统模拟器
-M virt-2.12 -smp 4 -m 3G \指定虚拟机的机器类型为 virt-2.12,虚拟 CPU 数量为 4,内存为 3GB
-cpu host -enable-kvm \使用主机 CPU 配置,启用 KVM 加速
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \使用指定的 BIOS 文件启动
-device ramfb \添加 RAM 帧缓冲设备作为显示输出
-device qemu-xhci,id=xhci -usb \添加 USB xHCI 控制器
-device usb-kbd -device usb-mouse -device usb-tablet -k en-us \添加 USB 键盘、鼠标、平板设备,设置键盘布局为美式英语
-device virtio-blk,drive=system \添加 virtio 块设备,用于系统盘
-drive if=none,id=system,format=raw,media=disk,file=system.vhdx \指定系统盘文件和格式
-device usb-storage,drive=install \添加 USB 存储设备,用于安装介质
-drive if=none,id=install,format=raw,media=cdrom,file=/home/pi/Win10/2004.iso \指定安装介质的 ISO 文件
-device usb-storage,drive=drivers \添加 USB 存储设备,用于驱动程序介质
-drive if=none,id=drivers,media=cdrom,file=/home/pi/Win10/virtio-win.iso \指定驱动程序介质的 ISO 文件
-device virtio-net,disable-legacy=on,netdev=net0 \添加 virtio 网络设备
-netdev user,id=net0,hostfwd=tcp::5555-:3389 \设置网络设备的用户模式网络堆栈,并转发端口
-vnc :1启用 VNC 服务器监听在显示号为 1 的屏幕上

5.  执行完上面命令后便可使用VNC客户端通过 [IP]:5901 去查看启动界面了

VNC,启动!

6.  显示 Press any key to boot from CD or DVD 时按 空格键 或其他按键,否则将不会从 CDROM 启动

启动界面

7.  等待会就会进入 Win10 安装程序界面,跟着它的步骤做就行了,密钥可跳过

8.  到这一步时是找不到磁盘的,需要安装磁盘驱动

安装步骤1


安装步骤2


安装步骤3


安装步骤4


9.  接着继续安装基本就可以到重启进入桌面了


系统信息


性能监视器


我的电脑


10.  解决联网问题(来自知乎:

网卡驱动

开启 KDNET


地址端口密码可乱填,例如:

HOSTIP:127.0.0.1 PORT:50000 KEY:1.2.3.4
bcdedit /dbgsettings NET HOSTIP:<调试宿主的IP> PORT:<端口> KEY:<KEY>
bcdedit /set {default} debug on

11.   关于低版本Win10 ARM64会让KVM崩溃的问题

详细信息


低版本Win10 ARM64使用KVM运行的解决方法:自己编译修改过的 QEMU


详细信息

12.  安装完成后可以移除Win10安装盘和驱动盘,否则会再次进入安装程序

sudo qemu-system-aarch64 \
-M virt-2.12 -smp 4 -m 3G -cpu host -enable-kvm \
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -device ramfb \
-device qemu-xhci,id=xhci -usb \
-device usb-kbd -device usb-mouse -device usb-tablet -k en-us \
-device virtio-blk,drive=system \
-drive if=none,id=system,format=raw,media=disk,file=system.vhdx \
-device virtio-net,disable-legacy=on,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::5555-:3389 -vnc :1

开机后还可以通过微软的远程桌面连接 (需要提前在系统内打开允许远程桌面),我的树莓派IP地址是:192.168.1.1 上面Qemu命令中有行:hostfwd=tcp::5555-:3389 的意思是将树莓派的5555端口转发到Win10 ARM64系统的3389端口


远程连接

效果预览

13.   USB设备直通虚拟机

首先树莓派通过lsusb命令查询USB设备的信息 USB 信息 然后可以通过hostbus=[Bus],hostport=[Port]或者vendorid=xxx,productid=xxx挂载USB设备

两个USB设备在虚拟机中不同的Hub中

-device qemu-xhci -device usb-host,hostbus=2,hostport=2 \	# Kingston DataTraveler
-device nec-usb-xhci -device usb-host,vendorid=0x0bda,productid=0x8152 \ # RTL8152

AIDA 64 信息

设备管理器


几个USB设备在虚拟机中同一个USB 3.0 Root Hub中

-device qemu-xhci,id=xhci \
-device usb-host,bus=xhci.0,hostbus=2,hostport=2 \ # Kingston DataTraveler
-device usb-host,bus=xhci.0,vendorid=0x0bda,productid=0x8152 \ # RTL8152
-device usb-host,bus=xhci.0,vendorid=0x0b95,productid=0x1790 \ # AX88179

如图上的usb设备


其他问题


A.如果报找不到vgabios-ramfb.bin的问题,那么执行下面命令:

wget https://github.com/qemu/qemu/raw/master/pc-bios/vgabios-ramfb.bin
mv vgabios-ramfb.bin /usr/share/seabios/

B.支持的有线网卡问题

Windows 10 ARM64只有 Mellanox的几个网卡和若干USB 网卡的驱动 ,USB网卡AX88179RTL8152都实测免驱。virtio-net甚至e1000等都没驱动。 虚拟网卡速度对比:

型号速率
rtl813910/100Mb/s
e10001Gb/s
virtio10Gb/s

C.QEMU参数解惑

-vnc :1					# 端口是从5900+n开始的,例如:1就是5901
hostfwd=tcp::5555-:3389 # 将宿主机的5555端口转发到客户机的3389端口
-machine usb=on -device usb-tablet # 解决QEMU与VNC鼠标光标不同步

D.虚拟机无法输入:切换为英文输入,重启后再打开vnc连接则可以输入

E.安装Win10时只安装SCSI驱动,不要安装NetKVM驱动,它会导致安装时蓝屏

F.局域网内的一台Win10 X64电脑与虚拟机Win10 ARM64直通USB有线网卡RTL8152再通过网线让两者相连的设置


图示