Windows ARM64 的安装

﹥>﹥吖頭↗ 提交于 2020-12-20 00:28:02

环境

操作系统:Ubuntu Kylin 优麒麟 20.10

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

下载 ISO

主页,https://uupdump.ml/

下载预览通道的版本

https://uupdump.ml/fetchupd.php?arch=arm64&ring=wif&build=latest

加压缩文件后,进入目录。

给 sh 文件添加执行权限。

chmod +x uup_download_linux.sh

安装 2 个依赖软件包。

sudo apt install aria2 wimtools

执行下载和打包。

./uup_download_linux.sh

大约需要下载 4.5G 左右。

 

获得 ISO

我不知道有任何微软页面允许您下载 ARM64 ISO,所以这部分依赖于社区制作的解决方案。

在 MDL 论坛上,我找到了正确的 ESD 下载链接,并使用 ESD>ISO 转换脚本(也在那里找到)获得了一个可引导的 ISO。

或者,adguard 的下载页面提供了类似的脚本,可以为您下载和打包一个 ISO。

还有一点很重要:

我没有成功启动 2004 或 20H2 版本(具体来说:19041.388 / 19041.423),所以我转而使用 1909 版本(18363.592)。

(更新2020-12-13:我又试过这个了,18363.592 好像真的是最后一个开机的版本。18363.1139 或者 19042.631 也没开机。)

安装

在我们开始之前,我们还需要:

1、Virtio driver ISO

2、适当大小的磁盘映像(qemu-img create -f qcow2 disk.qcow2 40G)

3、从 edk2.git-aarch64 RPM 中提取 QEMU_EFI.fd,www.kraxel.org/repos/jenkins/edk2/

qemu命令行如下所示:

isoname=18363.592.200109-2016.19H2_RELEASE_SVC_REFRESH_CLIENTBUSINESS_VOL_A64FRE_DE-DE.ISO
virtio=~/Downloads/virtio-win-0.1.185.iso
qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 4 -m 4096 \
        -device qemu-xhci -device usb-kbd -device usb-tablet \
        -drive file=disk.qcow2,if=virtio \
        -nic user,model=virtio \
        -drive file="$isoname",media=cdrom,if=none,id=cdrom -device usb-storage,drive=cdrom \
        -drive file="$virtio",media=cdrom,if=none,id=drivers -device usb-storage,drive=drivers \
        -bios QEMU_EFI.fd -device ramfb

然后,您可以像往常一样遵循安装过程。在对磁盘进行分区之前,安装程序会要求您加载磁盘驱动程序,这些驱动程序可以在 virtio cdrom 上的viostor/w10/arm64/ 中找到。

QEMU视频输出

上面的命令行已经考虑到了这些限制,这些部分仅用于解释。

QEMU 中运行 Windows 10 ARM 的前一篇博客文章使用了一个修补的 EDK2 来重新获得对标准 VGA 的支持。让人困惑的是,如果这个补丁可以正常使用,为什么 EDK2 取消了支持,但这不是我想用的解决方案。

原来ARM上的选项仅限于 virtio gpu 和 ramfb。Virtio显卡是Linux专用的,所以留下了ramfb。

用 Qemu 连接磁盘

由于 virt 机器没有 SATA 控制器,我们无法以通常的方式将硬盘连接到虚拟机,我在这里转而使用 virtio。通过 usb 存储可以做到这一点,这是开箱即用的,可以节省我们所有的 virtio 驱动程序工作(除了网络)。

这也意味着另外一件事(浪费了我相当多的时间):你不能使用 cdrom。

如果您这样做,EDK2 将引导 Windows 光盘很好,但安装程序会要求您尽早加载驱动程序(因为它找不到自己的光盘)。没有一个 virtio 驱动程序可以解决这种情况,让你无法明确指出哪里出了问题。

安装后

入职过程有一些小问题(特别是设备检测),如果你再试几次,它还是会让你继续。

高中央处理器使用率

第一次启动后,我注意到两个 100% CPU 的 regsvr32.exe 进程似乎没有在合理的时间内完成。

使用进程浏览器的进一步调查显示这些属于窗口的打印服务。由于我无论如何都不想在此虚拟机中打印,因此可以停止并禁用受影响的服务:

sc stop "Spooler"
sc config "Spooler" start= disabled

联网

我们仍然缺少虚拟光盘中的网络驱动程序。不幸的是,NetKVM驱动程序似乎没有正确签名,所以您必须首先启用加载未签名的驱动程序(并重新启动!):

然后可以从设备管理器(NetKVM/w10/ARM64/在cdrom上)安装正确的驱动程序。

常规性能调整

这些并不特定于 Windows 10 ARM 或虚拟机,但对于防止虚拟机运行缓慢非常有用。

REM Disable Windows Search Indexing
sc stop "WSearch"
sc config "WSearch" start= disabled
REM Disable Automatic Defragmentation
schtasks /Delete /TN "\Microsoft\Windows\Defrag\ScheduledDefrag" /F
REM Disable Pagefile
wmic computersystem set AutomaticManagedPagefile=FALSE
wmic pagefileset delete
REM Disable Hibernation
powercfg -h off

更高的显示分辨率

由于编写 QEMU 的 ramfb 已将其分辨率锁定为 800x600,这甚至破坏了 EDK2 的菜单(在引导期间按F2或Esc)。
幸运的是,这个问题已经在 master 中得到修复,并将在 qemu 5.1.0 中得到解决。如果不想等,今天就可以编译 5.1.0-rc3。
除此之外,您还需要与前面相同的 edk 包中的 vars-template-pflash.raw(UEFI会将其设置存储在那里)。
将以下内容添加到您的 qemu 参数:-drive file=vars-template-pflash.raw,if=pflash,index=1
然后可以在设备管理器> OVMF平台配置下将显示分辨率设置为 1024x768。

结语

稍加准备,就有可能在虚拟机中运行Windows 10 ARM。虽然仿真速度很慢,但是你可以用它来测试一两个程序。

如果您有足够规格和 KVM 支持的 ARM64 硬件,-enable-kvm -cpu host 标志可以让您获得本机执行速度,尽管我还没有机会看到这是如何执行的。

参考文献

Running Windows 10 for ARM64 in a QEMU virtual machine,

https://kitsunemimi.pw/notes/posts/running-windows-10-for-arm64-in-a-qemu-virtual-machine.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!