ARM 版 Windows 10 を Apple Silicon な Mac で動かす簡単な方法です。
メモ: 2020年11月30日現時点での方法で、今後おおきく改善されていくと思います(だといいな。)
-
Xcode を App Store で、あるいは Command Line Tools を Apple Silicon な Mac にインストール
xcode-select --install -
MacPorts で QEMU の依存ライブラリをインストール
https://www.macports.org/install.php
sudo port install ninja pkgconfig texinfo libtool glib2 libpixmansudo とか使いたくない場合は、
/opt/localを$USER:staffで作って、MacPorts をソースコードからインストールすれば可能です。 -
QEMU のソースコードをとってくる
git clone https://git.qemu.org/git/qemu.git -
ローカルブランチを作って、@_AlexGraf氏がつくった Hypervisor.framework のパッチをあてる
cd qemu git checkout 944fdc5 -b wip/hvf # これは現時点での `origin/master` のコミット。 curl https://patchwork.kernel.org/series/392975/mbox/|git am -
QEMU をビルドする
mkdir build cd build ../configure --target-list=aarch64-softmmu --enable-cocoa make -j- x86_64 な Homebrew などを使っている場合は問題がおこるので、
PATHなどを書き換えるなどして無効にしておくこと。 - Intel な Mac と比べて、めっちゃ速い。
- x86_64 な Homebrew などを使っている場合は問題がおこるので、
-
Windows 10 on ARM Insider Preview をダウンロードする
https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewARM64
-
QEMU 用の xHCI 無効化済み EDK II OVMF EFI イメージをダウンロードする。
ソースコードからビルドする場合は以下を参照のこと。
-
Windows 10 を起動する
./qemu-system-aarch64 \ -monitor stdio \ -M virt,highmem=off \ -accel hvf \ -cpu cortex-a72 \ -smp 4 \ -m 4096 \ -bios ~/Downloads/QEMU_EFI.fd \ -device ramfb \ -device qemu-xhci \ -device usb-kbd \ -device usb-mouse \ -nic user,model=virtio \ -drive file=~/Downloads/Windows10_InsiderPreview_Client_ARM64_en-us_20231.VHDX,if=none,id=boot,cache=writethrough \ -device nvme,drive=boot,serial=bootイメージへのパスなどは適宜修正してください。
VirtIO NIC は標準では有効にならないので、デバイスドライバを入れる必要がある。
-
VirtIO デバイスドライバの ISO を Fedora Project からダウンロード。
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
-
デバイスドライバの ISO をマウント
qemu-system-aarch64のオプションに以下を追加する。-drive file=~/Downloads/virtio-win-0.1.190.iso,media=cdrom,if=none,id=drivers \ -device usb-storage,drive=driversイメージへのパスなどは適宜修正してください。
-
デバイスドライバの署名検証を無効にする
Windows を起動して Windows スタートボタン を右クリック、Command Prompt (Admin) を選択。
BCDEdit を使ってテスト署名されたデバイスドライバを有効にする。
Bcdedit.exe -set TESTSIGNING ONこのあと Windows を再起動すること。
詳細はこちらを参照のこと。
-
デバイスドライバのインストール
Windows が再度起動したら Windows スタートボタン を右クリック、Device Manager を選択。
Device Manager のウィンドウで、View メニューの Devices by Connection を選択。
デバイスのツリーから,
ACPU ARM64-based PC,Microsoft ACPI-Compliant System,PCI Express Root Complexと選択してその中にあるUnknown deviceを探す。 (Unknown deviceはデバイスのツリーに沢山あるけれど、PCI Express Root Complexの下にあるのが、VirtIO NIC。)該当の
Unknown deviceを右クリックして、Update Drivers を選択、Browse my computer for drivers を選んで、D:\NetKVM\w10\ARM64を指定。Next をクリックして
Red Hat VertIO Ethernet Adapterをインストール。
OVMF EFI イメージをソースコードから作る場合、とりあえず簡単にビルドするには、まず VMWare Fusion とか、VirtualBox とかを Intel Mac (そう、Intel Mac が必要)にインストールして、Ubuntu などの Linux が必要になります。
-
EDK II のソースコードを取ってくる。
git clone https://github.com/tianocore/edk2.git cd edk2 git checkout edk2-stable202008 # stable ってタグされてるやつがいい git submodule update --init --recursive -
Hypervisor.framework パッチの制限で xHCI を無効にする必要がある。
/ArmVirtPkg/ArmVirtQemu.dscと/ArmVirtPkg/ArmVirtQemuFvMain.fdf.incにあるMdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.infの行をコメントアウト。 -
で、ビルド。
apt install install iasl python3 python3-distutils uuid-dev gcc-aarch64-linux-gnu source edksetup.sh make -C BaseTools env GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dscBuild/ArmVirtQemu-AARCH64/DEBUG_GCC5/FVにQEMU_EFI.fdとかができるはず。
CPU 使用率が指定したコア数 × 100% で張り付くのは Hypervisor.framework パッチの仕様です。Patch 2 でなおった- 同様の手順で Ubuntu Server for ARM も動きます。こっちはより安定している。 https://ubuntu.com/download/server/arm
- 8GB の Apple Silicon Mac だとメモリが厳しいかもしれない。4096 から減らしても問題ない。