教大家安装 Windows 10 on ARM 版本

从苹果的 M1 芯片 MacBook 发布后,打破了人们对 ARM 芯片性能弱鸡,无法运行大型软件的印象。苹果牛X的地方在于 X86 和 ARM 之间的过渡,目前已经有非常多的软件开发商进行了对 ARM 的适配,例如 Adobe 系列、QQ 等常用到的软件。

其实在 2012 年的时候微软就发布过了基于 Tegra 3 ARM 的 Surface 平板电脑,后来又发布了基于骁龙 SQ1/SQ2 ARM 的 Surface Pro X,不过由于性能关心,一直没有获得太大的关注度,加上缺乏原生开发的 ARM 应用。

不过最近 Windows 10 on ARM 似乎又火了,更多人愿意尝试这个系统,因为部分软件开发商在适配苹果的 M1 芯片,顺手也适配了下 Windows 10 on ARM,例如之前 Adobe 就宣布推出 Windows ARM 版的 PhotoShop,目前还是 Beta 阶段。

20201223

近期 macOS 著名的虚拟机软件 Parallel Desktop 新版本支持 M1 Mac,可运行Windows 10 on ARM 系统,所以买了 M1 Mac 的小伙伴,将得到一台能运行macOS,iOS,Windows 程序的笔记本。

20201223-1

如果你也想体验尝试下 Windows 10 on ARM 系统,今天小羿就分享如何在 X86 的电脑上模拟运行 Windows 10 on ARM 系统。注意:下面的教程来源知乎用户 @初生之鸟 小伙伴的分享。

准备工具

1.Windows 10 on ARM

2.QEMU软件

3.QEMU EFI 文件

4.USB Mass Storage DXE 驱动

安装方法

创建两个 VHD,一个 UEFI 能访问的 VHD,存放 USB Mass Storage DXE 驱动模块大小 16MB 足矣,下文称为 hdd.vhd(如果能够把驱动模块集成到 UEFI 里面,这个 VHD 可以省略)。

以及一个实际安装系统的 VHD,下文称为 usb.vhd大小 32-64GB 足够了,毕竟这也只能作为实验。

接着挂载 hdd.vhd 文件,然后创建分区并格式化为 FAT32 格式,放入 USBMassStorageDxe_arm64.efi 模块文件,然后卸载 VHD。

挂载 usb.vhd,使用 GPT 分区表,创建 ESP 和安装系统的分区 ESP 使用 FAT32 格式,大小 100MB,安装系统的分区使用 NTFS,占剩下的空间给这两个分区分配盘符,下文假设 ESP 为 S:,系统安装分区为 W:

然后使用 dism 将系统 ISO 的 install.wim 恢复到 W: 假设 ISO 挂载到 G:,恢复的映像 ID 为 4(一般 4 是 Pro,具体的 ID 请使用 dism /get-wiminfo 查看)

C:\> dism /apply-image /imagefile:G:\sources\install.wim /index:4 /applydir:W:\

然后使用 bcdboot 在 ESP 分区上建立引导

C:\> bcdboot W:\Windows /s S: /f UEFI

然后卸载 VHD,这里建议备份一下 usb.vhd 再继续。

QEMU配置启动

将 Linaro UEFI 的 QEMU_EFI.fd 复制到一个方便的位置

下面假设为以下路径

  • EFI D:\QEMU_EFI.fd
  • hdd.vhd D:\hdd.vhd
  • usb.vhd D:\usb.vhd

然后用以下命令启动 QEMU ARM64 模拟器

qemu-system-aarch64 -M virt -m 2048 -cpu cortex-a53 -smp 2 -bios D:\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-kbd -device usb-tablet -drive file=D:\usb.vhd,id=usbstick,if=none -device usb-storage,drive=usbstick -hda D:\hdd.vhd

其中

  • -m 2048 为内存大小,单位为 MB
  • -cpu cortex-a53 为模拟的 CPU 内核,可选 cortex-a57 和 cortex-a53
  • -smp 2 为模拟的 CPU 核心数

以上可以按实际情况调整

模拟器启动之后,按 ESC 进入 UEFI 的设置菜单,选择 Boot Manager,选择最下面的 EFI Internal Shell,进入 EFI Shell

然后应该可以看到 hdd.vhd 的分区 FS0,键入以下命令加载 USB Mass Storage 驱动

load fs0:\USBMassStorageDxe_arm64.efi

然后键入以下命令,刷新设备列表

map -r

这时应该能看到一个 FS0: 和一个 FS1:,一般 usb.vhd 的 ESP 会分配到 FS0:,所以我们键入

fs0:\efi\boot\bootaa64.efi

启动系统,如无意外的话,系统就会启动了。

20201223-2

系统启动,Logo 来自于 UEFI 固件

20201223-3

开始菜单

20201223-4

系统属性

20201223-5

自带的 UWP 是原生的,不过是32位

20201223-6

Edge 是原生 64 位 ARM

20201223-7

系统组件,如 Shell Experience Host(开始菜单、通知中心等 UI 模块)、Text Input Application (触摸键盘与手写模块)、Cortana(小娜与搜索 UI)等 UWP 则为原生 64 位 ARM 程序

20201223-8

用 .Net Framework 自带的 C# 编译器编译了一个简单的 Hello World 程序,显示为 32 位,实际上是 x86-32 (系统没有带任何 ARM 平台的 .Net Framework,系统默认的 shell 也是 cmd 而不是 PowerShell)

20201223-9

同时运行三个平台(x86-32、ARM、ARM64)的 cmd.exe,并显示 PROCESSOR_ARCHITECTURE 环境变量

20201223-10

Windows 目录下的四个 System 目录(SyCHPE32: CHPE DLL,供 x86 程序调用,内部是 ARM 机器码,使得核心系统库不需要进行二进制翻译,减少性能损失;SysARM32: ARM 32 位系统文件;System32: ARM 64 位系统文件;SysWOW64: x86 32 位系统文件)

20201223-11

x86 二进制翻译器核心组件:xtajit.dll、xtac.exe、XtaCache.exe

20201223-12

运行 x86-32 版本的 Notepad++

20201223-13

运行 x86-32 版本的 CPU-Z(CPU-Z 的驱动加载失败,但是依然能获取部分信息)

性能测试

注意:由于 QEMU 使用的是异构模拟,性能肯定非常糟糕,这里仅作为 x86 二进制翻译性能的一个参考。

也许很少人知道,在 Windows RT 的时候,有一批移植到 Windows RT 的原生 ARM32 Windows 程序,而这些程序在 Windows 10 ARM64 平台依然可以运行。

而其中有一份 7zip 9.22 beta。这里我们就用这个版本,以及官方下载的 7zip 9.22 beta x86-32 版本做一个简单的性能对比。

测试环境:

  • 宿主
  1. Intel i5 6300HQ,4GBx2 DDR4 2133Mhz 双通道内存,Windows 10 Build 17074 x64
  2. 系统盘 为 Intel 600p SSD 128G,存放虚拟机 VHD 的为希捷 5400 转机械硬盘
  3. QEMU 2.11.0-rc4 @ Ubuntu 16.04 LTS (WSL),使用默认配置编译,SDL 图形
  4. QEMU 启动参数如上文所示
  • 虚拟机
  1. Machine virt,Cortex-A53 双核,2GB 内存
  2. 系统盘为 XHCI USB Mass Storage (原因见上文)
  3. Windows 10 Build 17074 ARM64

20201223-14

原生 ARM 32 位版本

20201223-15

x86 版本

有细心的朋友可能会发现,这两个版本并非完全相同,所以这只是一个非常粗略的性能比较,但可以明显看到,x86 二进制翻译带来了接近 30-50% 的性能损失。

对于轻量级应用来说问题不大,但是对于性能要求高的应用,就会非常吃力,尽管如此,在技术上已经非常成功了。

总结

目前 Windows 10 on ARM 最大问题缺乏有力的硬件平台和软件生态,不过之前有消息爆料微软正研发自家 ARM 处理器,也许后续会推出对应的 Surface 设备,最后感兴趣的小伙伴可以先尝鲜体验下 Windows 10 on ARM 系统。

对了,如果你想在手机上运行 Windows 10 on ARM 系统,可以通过「Limbo」软件,具体看文末的相关文章。

下载

  • 下载地址:公众号回复 WinARM 获取下载

相关文章

相关教程

  • ARM in QEMU:https://winaero.com/install-windows-10-arm-qemu
  • 本文教程来源:https://zhuanlan.zhihu.com/p/32905265