ARM 版 Windows 10 や Ubuntu を Apple Silicon な Mac で動かす簡単な方法です。
メモ: 2021年2月8日現時点での方法で、今後まだ改善されていくと思います。
-
Xcode を App Store で、あるいは Command Line Tools を Apple Silicon な Mac にインストール
xcode-select --install
-
ARM64 対応の Homebrew で QEMU の依存ライブラリをインストール
すでに x86_64 の Homebrew が
/usr/local
にインストールされている場合は削除するなどしてください。 x86_64 の Homebrew では QEMU がビルドできません/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install ninja pkgconfig glib pixman
-
QEMU のソースコードをとってくる
git clone https://git.qemu.org/git/qemu.git
-
ローカルブランチを作って、@_AlexGraf氏がつくった Hypervisor.framework のパッチをあてる
cd qemu git checkout d0dddab40e -b wip/hvf curl 'https://patchwork.kernel.org/series/418581/mbox/'|git am --3way
-
QEMU をビルドする
mkdir build cd build ../configure --target-list=aarch64-softmmu --enable-cocoa make -j
-
QEMU 用の EDK II OVMF EFI イメージをダウンロードする。
このイメージは
stable202011
タグに、QemuRamfb.c
に追加の解像度を足したものです。さらに解像度を追加するなど、ソースコードからビルドする場合は以下を参照のこと。
-
pflash イメージを作って、画面サイズなどを設定する不揮発なストレージを準備する
QEMU_EFI-....tar.gz
をダウンロードしたディレクトリで以下を実行。cd ~/Downloads tar xzvf QEMU_EFI-*.tar.gz dd if=/dev/zero of=pflash0.img bs=1m count=64 dd if=/dev/zero of=pflash1.img bs=1m count=64 dd if=QEMU_EFI.fd of=pflash0.img conv=notrunc dd if=QEMU_VARS.fd of=pflash1.img conv=notrunc
- このステップは省略可能。その場合は次のステップで
-drive ...,if=pflash,...
のかわりに-bios ~/Downloads/QEMU_EFI.fd
を指定すること。ただし、EFI での変更が保存されなくなります。
- このステップは省略可能。その場合は次のステップで
-
Windows 10 on ARM Insider Preview をダウンロードする
https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewARM64
-
VHDX から qcow2 に変換する
VHDX のままだとかなりの頻度でイメージが壊れる印象があるので qcow2 に変換しておく。
qemu-img convert -p -O qcow2 ~/Downloads/Windows10_InsiderPreview_Client_ARM64_en-us_21286.VHDX ~/Downloads/Windows10.qcow2
-
Windows 10 を起動する
./qemu-system-aarch64 \ -monitor stdio \ -M virt,highmem=off \ -accel hvf \ -cpu cortex-a72 \ -smp 4 \ -m 4096 \ -drive file=~/Downloads/pflash0.img,format=raw,if=pflash,readonly=on \ -drive file=~/Downloads/pflash1.img,format=raw,if=pflash \ -device ramfb \ -device qemu-xhci \ -device usb-kbd \ -device usb-tablet \ -device intel-hda \ -device hda-duplex \ -nic user,model=virtio \ -drive file=~/Downloads/Windows10.qcow2,format=qcow2,if=none,id=boot,cache=writethrough \ -device nvme,drive=boot,serial=boot
- イメージへのパスなどは適宜修正してください。
- TianoCore のロゴが出ている時に
ESC
を押して、Device Manager
、OVMF Platform Configuration
、Change Preferred Resolution for Next Boot
と進めて解像度を変更できます。 - 解像度を追加するには、下記の「EDK II の OVMF EFI イメージをビルドする」に従って
OvmfPkg/QemuRamfbDxe/QemuRamfb.c
を変更し、新しいQEMU_EFI.fd
を作ってください。 -device usb-mouse
より-device usb-tablet
を使うことでマウスカーソルがロックされなくなり使いやすくなります。-device intel-hda -device hda-duplex
でオーディオが使えるようになります。-nic user,model=virtio
がネットワークインターフェイスです。有効にするには以下を参照してください。
VirtIO NIC は標準では有効にならないので、デバイスドライバを入れる必要がある。
-
VirtIO デバイスドライバの ISO を Fedora Project からダウンロード。
-
デバイスドライバの 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
をインストール。
ディスクイメージである Windows10.qcow2
ファイルは Windows Update などをすると容量まで大きくなる可能性があり、たとえファイルを削除してもディスクイメージのサイズは減りません。
そのため、ディスクサイズが大きくなりすぎた場合などは使用していない領域を開放する必要があります。
-
Windows 10に付属の Defragment and Optimize Drives で、
C:
ドライブを Optimize する。 -
SDelete をダウンロードする。
SDelete64a -z C:
を Administrator Command Prompt で実行し、使用していない領域をゼロで埋める。 このコマンドの実行はしばらくかかります。この時、ディスクイメージがとても大きくなるので Mac の空き容量に注意。 -
Windows を終了して、以下のコマンドを Mac で実行する。 このコマンドの実行はしばらくかかります。また縮小したディスクイメージは別に作られるので Mac の空き容量に注意。
qemu-img convert -O qcow2 ~/Downloads/Windows10.qcow2 ~/Downloads/Windows10_compacted.qcow2
-
Windows10.qcow2
を縮小したWindows10_compacted.qcow2
で置き換え。
ARM 版 Windows 10 を動かす手順に従って QEMU を準備して、Ubuntu Server for ARM64 をダウンロードしてインストールします。
-
上記の手順 1 から 7 までに従って QEMU を準備する。
-
空のディスクイメージを作成する。
./qemu-img create -f qcow2 ~/Downloads/ubuntu.qcow2 40G
-
Ubuntu Server for ARM64 をダウンロードする。
-
Ubuntu Server for ARM をインストールする。
./qemu-system-aarch64 \ -monitor stdio \ -M virt,highmem=off \ -accel hvf \ -cpu cortex-a72 \ -smp 4 \ -m 4096 \ -drive file=~/Downloads/pflash0.img,format=raw,if=pflash,readonly=on \ -drive file=~/Downloads/pflash1.img,format=raw,if=pflash \ -device virtio-gpu-pci \ -display default,show-cursor=on \ -device qemu-xhci \ -device usb-kbd \ -device usb-tablet \ -device intel-hda \ -device hda-duplex \ -drive file=~/Downloads/ubuntu.qcow2,if=virtio,cache=writethrough \ -cdrom ~/Downloads/ubuntu-20.04.1-live-server-arm64.iso
- 指示に従ってインストールしたあとは
-cdrom
は不要です。
- 指示に従ってインストールしたあとは
上記の手順に従って Ubuntu Server for ARM64 を動かします。
-
EDK II のソースコードを取ってくる。
git clone --depth 1 --branch edk2-stable202011 https://github.com/tianocore/edk2.git cd edk2 git submodule update --init --recursive
Hypervisor.framework パッチの制限で xHCI を無効にする必要があれば
/ArmVirtPkg/ArmVirtQemu.dsc
と/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc
にあるMdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
の行をコメントアウト。たぶん現状は問題ない。 -
ビルドする
sudo apt install iasl python3 python3-distutils uuid-dev make g++ source edksetup.sh make -C BaseTools build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc
Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/FV
にQEMU_EFI.fd
とQEMU_VARS.fd
ができるはず。-
これらのファイルを簡単に macOS ホストに取り出すには macOS でリモートアクセスを有効にして
scp
で10.0.2.2
にコピー。 -
x86_64 の環境でビルドする場合は以下のツールチェーンでクロスコンパイル。
sudo apt install gcc-aarch64-linux-gnu env GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc
-