虚拟机中安装 Windows ARM64

原创
02/25 20:40
阅读数 3W

环境

操作系统:Ubuntu Kylin 优麒麟 21.04、Debian 11 Bullseye

适用架构:ARM64(鲲鹏 920 x8、飞腾 FT-2000/4)

安装优麒麟

请参考《优麒麟的安装(ARM64)》,https://my.oschina.net/chipo/blog/3212449

注意:由于新版 LibVirtD 存储池的需要,操作系统安装时请将分区格式化为 BTRFS。

安装 QEMU 和 UEFI

sudo apt install qemu qemu-kvm bridge-utils virt-manager libguestfs-tools qemu-system qemu-system-arm qemu-efi qemu-efi-aarch64 qemu-utils libvirt-clients libvirt-daemon-system gir1.2-spiceclientgtk-3.0

如果想了解一些更详细的信息,请参考《优麒麟中安装虚拟机(ARM64)》,https://my.oschina.net/chipo/blog/4307152

 

VHDX 硬盘镜像

下载 Windows 10 ARM64 的硬盘镜像。建议使用这个方式安装。需要使用微软账号登录网站。

https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewARM64

转换格式。

cd ~/Download

qemu-img convert -p -O qcow2 ./Windows10_InsiderPreview_Client_ARM64_en-us_21354.VHDX ./Windows10_InsiderPreview_Client_ARM64_en-us_21354.qcow2

如果觉得转换后的文件名称太长,可以在上述命令中自行修改,比如 ./win10arm21286.qcow2

ISO 光盘镜像

这是个可选步骤。请参考《Windows ARM64 的安装》https://my.oschina.net/chipo/blog/4816548

虚拟系统管理器

从开始菜单中启动“虚拟系统管理器”。“文件”、“新建虚拟机”、“导入现有磁盘镜像”。

“前进”、“浏览”

“本地浏览”,选择硬盘镜像所在的路径。

“选择卷”,选择要安装的操作系统,输入“Ubuntu 20.10”,是的,你没看错,目前如果选择“Windows 10”在生成虚拟机时会报错。

输入分配给虚拟机的内存容量和 CPU 的核心数。

输入虚拟机的名称,比如“Win10”。勾选“在安装前自定义配置”。

点击“完成”后,在弹出的新对话框中,选中“磁盘”。由于 virt 机器没有 SATA 控制器,这里转而使用 virtio。通过 usb 存储可以做到这一点。将“磁盘总线”改为“USB”。SCSI 可能会导致虚拟机蓝屏。

默认情况下,ARM64平台的虚拟机并未添加显卡、键盘和鼠标。显卡型号请选择“Ramfb”。

VGA 设备及其驱动在 KVM 环境下不能用(这也是它被踢出 ArmVirtPkg 的原因),而 virtio-gpu 的 GOP 不被 Windows 支持。

qemu 3.0.0 加入了 ramfb 设备,用一块内存模拟类 VGA 的 FrameBuffer,这样 Windows 就有显示输出了(当然还是没有硬件加速)。

如何添加这些虚拟硬件,请参考《优麒麟中安装虚拟机(ARM64)》,https://my.oschina.net/chipo/blog/4307152

TPM 2.0

安装 Windows 10 可以省略这个步骤。如果要升级到 Windows 11,建议您参考以下内容。

Windows 11 要求硬件支持 TPM 2.0,虽然微软在 OEM 领域放宽了要求,但是仅限于特定的需求。

QEMU 支持添加一个虚拟 TPM 设备给虚拟机。

目前 QEMU 安装 Windows 11 时,自行编译并添加 TPM 2.0 的方法由 Ubuntu Wiki 提供。

准备:QEMU tpm 依赖扩展二进制程序 swtpm 和 swtpm_setup。

这两个软件包虽然可用,但是还没有进入 Debian/Ubuntu 的仓库。ITP,https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=941199

获取源代码,https://github.com/stefanberger/swtpm

git clone https://github.com/stefanberger/swtpm.git

手动构建二进制包。

sudo apt install libfuse-dev libglib2.0-dev libgmp-dev expect libtasn1-dev socat tpm-tools python3-twisted gnutls-dev gnutls-bin  libjson-glib-dev python3-setuptools softhsm2 libseccomp-dev automake autoconf libtool debhelper libtpms-dev libssl-dev

cd swtpm

dpkg-buildpackage -us -uc -j$(nproc)

编译完成后会在上一级目录保存新生成的文件。

swtpm_0.7.0~dev1_arm64.buildinfo
swtpm_0.7.0~dev1_arm64.changes
swtpm_0.7.0~dev1_arm64.deb
swtpm_0.7.0~dev1.dsc
swtpm_0.7.0~dev1.tar.xz
swtpm-dbgsym_0.7.0~dev1_arm64.ddeb
swtpm-dev_0.7.0~dev1_arm64.deb
swtpm-libs_0.7.0~dev1_arm64.deb
swtpm-libs-dbgsym_0.7.0~dev1_arm64.ddeb
swtpm-tools_0.7.0~dev1_arm64.deb
swtpm-tools-dbgsym_0.7.0~dev1_arm64.ddeb

接下来,安装其中的 3 个 deb 文件:swtpm swtpm-libs swtpm-tools。

sudo dpkg -i swtpm_0.7.0~dev1_arm64.deb swtpm-libs_0.7.0~dev1_arm64.deb swtpm-tools_0.7.0~dev1_arm64.deb

至此,在 QEMU 的虚拟机启动后,就可以选择“添加硬件”、“TPM”了。

VM Setup in Virtual Machine Manager:
1. Create a new Virtual Machine with Connection Type QEMU/KVM
2. Configure the rest of the VM as desired but choose "Customize configuration before install"
3. One may want use UEFI firmware.  On the overview tab, consider using the UEFI "secboot.fd" firmware.  See OVMF for more details.
4. Add hardware -> TPM

启动系统

所有相关设备添加完成后,点击左上角“开始安装”。

最终的硬件类似下图所示。

系统启动后会进行一些安装步骤,还会重启,请耐心等待一下。

由于现在驱动程序还不是很完善,可能会遇到 Windows 闪退或莫名的卡顿,建议更新驱动。

已知的问题:Firefox ARM64 会造成系统假死。

网卡驱动

下载虚拟网卡的驱动程序。

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

可以添加光驱至虚拟机,也可以将 ISO 文件复制到优盘,然后在虚拟机中添加 USB 设备,连接到这个优盘。复制 ISO 文件后,挂载或解压缩。

禁用设备驱动程序的签名强制。

启动 Windows,然后右键单击“开始”按钮,然后选择 Command Prompt (Admin) 也就是“命令提示符(管理员)”。 使用 bcdedit 启用“测试签名”的设备驱动程序。

bcdedit.exe -set TESTSIGNING ON

然后重启 Windows。一旦再次启动,然后右击窗口开始按钮,然后选择 Device Manager(设备管理器)。 在设备管理器中,选择 View(视图)菜单,然后选择 Devices by Connection(按连接列出的设备)。

在设备树中导航,选择 ACPI ARM64-based PC, Microsoft ACPI-Compliant System, PCI Express Root Complex,然后您将在那里看到一个未知设备。(树中有许多未知设备,但 PCI Express 根联合体下的设备是虚拟网卡。) 右键单击未知设备,然后选择更新驱动程序,然后在我的计算机上浏览驱动程序,然后选择 ISO 镜像挂载或释放后所在的文件夹,比如 D:\,勾选“包括子文件夹”。 单击下一步安装红帽 VirtIO 以太网适配器(Red Hat VertIO Ethernet Adapter)。

SCSI 驱动

安装方法同网卡。只是设备不同而已。(可选步骤:SCSI 驱动安装完毕后,关闭操作系统,将 USB 磁盘删除,不要删除硬盘镜像。添加新存储,选择刚才的硬盘镜像,可以选择使用 SCSI 模式启动了。)

声卡

对于鲲鹏 920 的桌面用户来说,可以添加 USB 声卡,选择“USB 主机设备”、“Realtek USB Audio”。物理机的音频输出改为显卡的 HDMI 音频,这样虚拟机和物理机就分别有自己的音频设备了。

远程桌面

不习惯使用英文界面的,可以自行安装一下中文语言包,这里不赘述了。在 Windows 中开启远程桌面访问后,通过 remmina 连接操作系统,使用体验更好一些。设置完名称、IP、用户名、密码……后,在“高级”标签页中,“画质”选“最好”。“声音”可以选择“本地-高质量”。

界面效果。

命令行方式安装

如果需要以命令行方式安装,请参考以下步骤。

设置 UEFI 固件

为非易失性变量存储准备 pflash,例如屏幕分辨率。

进入 QEMU_EFI.fd 文件所在的目录,转换文件。此步骤可选,可以用“-bios /usr/share/qemu-efi/QEMU_EFI.fd”代替“-drive...if=pflash”的行,但在这种情况下,EFI 中的任何更改都不会持久。

cd /usr/share/qemu-efi-aarch64 && \
sudo dd if=/dev/zero of=./qemu_efi.img bs=64M count=1 && \
sudo dd if=/dev/zero of=./qemu_vars.img bs=64M count=1 && \

sudo dd if=./QEMU_EFI.fd of=./qemu_efi.img conv=notrunc && \
sudo dd if=./QEMU_VARS.fd of=./qemu_vars.img conv=notrunc

启动虚拟机

sudo qemu-system-aarch64 \
-M virt \
-cpu host \
-smp 4 \
-accel kvm \
-m 4096 \

-drive file=/usr/share/qemu-efi-aarch64/qemu_efi.img,format=raw,if=pflash,readonly=on \
-drive file=/usr/share/qemu-efi-aarch64/qemu_vars.img,format=raw,if=pflash \
-device ramfb \
-device qemu-xhci \
-device usb-kbd \
-device usb-tablet \
-drive if=virtio,file=
/home/lio/img/dsk/Windows10_InsiderPreview_Client_ARM64_en-us_21286.qcow2,format=qcow2 \
-netdev user,id=net0 \
-device e1000,netdev=net0

参考文献

《Windows 10 ARM64 实战》,https://zhuanlan.zhihu.com/p/32905265

《Windows 10 ARM64 on KVM》,https://zhuanlan.zhihu.com/p/82165601

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部