從蘋果的 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 階段。
近期 macOS 著名的虛擬機器軟體 Parallel Desktop 新版本支援 M1 Mac,可執行Windows 10 on ARM 系統,所以買了 M1 Mac 的小夥伴,將得到一臺能執行macOS,iOS,Windows 程式的筆記本。
準備工具
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.fdhdd.vhd D:\hdd.vhdusb.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
啟動系統,如無意外的話,系統就會啟動了。
系統啟動,Logo 來自於 UEFI 韌體
開始選單
系統屬性
自帶的 UWP 是原生的,不過是32位
Edge 是原生 64 位 ARM
系統元件,如 Shell Experience Host(開始選單、通知中心等 UI 模組)、Text Input Application (觸控鍵盤與手寫模組)、Cortana(小娜與搜尋 UI)等 UWP 則為原生 64 位 ARM 程式
用 .Net Framework 自帶的 C# 編譯器編譯了一個簡單的 Hello World 程式,顯示為 32 位,實際上是 x86-32 (系統沒有帶任何 ARM 平臺的 .Net Framework,系統預設的 shell 也是 cmd 而不是 PowerShell)
同時執行三個平臺(x86-32、ARM、ARM64)的 cmd.exe,並顯示 PROCESSOR_ARCHITECTURE 環境變數
Windows 目錄下的四個 System 目錄(SyCHPE32: CHPE DLL,供 x86 程式呼叫,內部是 ARM 機器碼,使得核心系統庫不需要進行二進位制翻譯,減少效能損失;SysARM32: ARM 32 位系統檔案;System32: ARM 64 位系統檔案;SysWOW64: x86 32 位系統檔案)
x86 二進位制翻譯器核心元件:xtajit.dll、xtac.exe、XtaCache.exe
執行 x86-32 版本的 Notepad++
執行 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 版本做一個簡單的效能對比。
測試環境:
宿主Intel i5 6300HQ,4GBx2 DDR4 2133Mhz 雙通道記憶體,Windows 10 Build 17074 x64系統盤 為 Intel 600p SSD 128G,存放虛擬機器 VHD 的為希捷 5400 轉機械硬碟QEMU 2.11.0-rc4 @ Ubuntu 16.04 LTS (WSL),使用預設配置編譯,SDL 圖形QEMU 啟動引數如上文所示虛擬機器Machine virt,Cortex-A53 雙核,2GB 記憶體系統盤為 XHCI USB Mass Storage (原因見上文)Windows 10 Build 17074 ARM64原生 ARM 32 位版本
x86 版本
有細心的朋友可能會發現,這兩個版本並非完全相同,所以這只是一個非常粗略的效能比較,但可以明顯看到,x86 二進位制翻譯帶來了接近 30-50% 的效能損失。
對於輕量級應用來說問題不大,但是對於效能要求高的應用,就會非常吃力,儘管如此,在技術上已經非常成功了。
總結
目前 Windows 10 on ARM 最大問題缺乏有力的硬體平臺和軟體生態,不過之前有訊息爆料微軟正研發自家 ARM 處理器,也許後續會推出對應的 Surface 裝置,最後感興趣的小夥伴可以先嚐鮮體驗下 Windows 10 on ARM 系統。