mirror of https://gitlab.com/qemu-project/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.5 KiB
ReStructuredText
66 lines
2.5 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
VMApple machine emulation
|
|
========================================================================================
|
|
|
|
VMApple is the device model that the macOS built-in hypervisor called "Virtualization.framework"
|
|
exposes to Apple Silicon macOS guests. The "vmapple" machine model in QEMU implements the same
|
|
device model, but does not use any code from Virtualization.Framework.
|
|
|
|
Prerequisites
|
|
-------------
|
|
|
|
To run the vmapple machine model, you need to
|
|
|
|
* Run on Apple Silicon
|
|
* Run on macOS 12.0 or above
|
|
* Have an already installed copy of a Virtualization.Framework macOS 12 virtual
|
|
machine. Note that newer versions than 12.x are currently NOT supported on
|
|
the guest side. I will assume that you installed it using the
|
|
`macosvm <https://github.com/s-u/macosvm>`__ CLI.
|
|
|
|
First, we need to extract the UUID from the virtual machine that you installed. You can do this
|
|
by running the shell script in contrib/vmapple/uuid.sh on the macosvm.json file.
|
|
|
|
.. code-block:: bash
|
|
:caption: uuid.sh script to extract the UUID from a macosvm.json file
|
|
|
|
$ contrib/vmapple/uuid.sh "path/to/macosvm.json"
|
|
|
|
Now we also need to trim the aux partition. It contains metadata that we can just discard:
|
|
|
|
.. code-block:: bash
|
|
:caption: Command to trim the aux file
|
|
|
|
$ dd if="aux.img" of="aux.img.trimmed" bs=$(( 0x4000 )) skip=1
|
|
|
|
How to run
|
|
----------
|
|
|
|
Then, we can launch QEMU with the Virtualization.Framework pre-boot environment and the readily
|
|
installed target disk images. I recommend to port forward the VM's ssh and vnc ports to the host
|
|
to get better interactive access into the target system:
|
|
|
|
.. code-block:: bash
|
|
:caption: Example execution command line
|
|
|
|
$ UUID="$(contrib/vmapple/uuid.sh 'macosvm.json')"
|
|
$ AVPBOOTER="/System/Library/Frameworks/Virtualization.framework/Resources/AVPBooter.vmapple2.bin"
|
|
$ AUX="aux.img.trimmed"
|
|
$ DISK="disk.img"
|
|
$ qemu-system-aarch64 \
|
|
-serial mon:stdio \
|
|
-m 4G \
|
|
-accel hvf \
|
|
-M vmapple,uuid="$UUID" \
|
|
-bios "$AVPBOOTER" \
|
|
-drive file="$AUX",if=pflash,format=raw \
|
|
-drive file="$DISK",if=pflash,format=raw \
|
|
-drive file="$AUX",if=none,id=aux,format=raw \
|
|
-drive file="$DISK",if=none,id=root,format=raw \
|
|
-device vmapple-virtio-blk-pci,variant=aux,drive=aux \
|
|
-device vmapple-virtio-blk-pci,variant=root,drive=root \
|
|
-netdev user,id=net0,ipv6=off,hostfwd=tcp::2222-:22,hostfwd=tcp::5901-:5900 \
|
|
-device virtio-net-pci,netdev=net0
|
|
|