qemu/docs/system
Alexander Graf 59f4d65584 hw/vmapple/vmapple: Add vmapple machine type
Apple defines a new "vmapple" machine type as part of its proprietary
macOS Virtualization.Framework vmm. This machine type is similar to the
virt one, but with subtle differences in base devices, a few special
vmapple device additions and a vastly different boot chain.

This patch reimplements this machine type in QEMU. To use it, you
have to have a readily installed version of macOS for VMApple,
run on macOS with -accel hvf, pass the Virtualization.Framework
boot rom (AVPBooter) in via -bios, pass the aux and root volume as pflash
and pass aux and root volume as virtio drives. In addition, you also
need to find the machine UUID and pass that as -M vmapple,uuid= parameter:

$ qemu-system-aarch64 -accel hvf -M vmapple,uuid=0x1234 -m 4G \
    -bios /System/Library/Frameworks/Virtualization.framework/Versions/A/Resources/AVPBooter.vmapple2.bin
    -drive file=aux,if=pflash,format=raw \
    -drive file=root,if=pflash,format=raw \
    -drive file=aux,if=none,id=aux,format=raw \
    -device vmapple-virtio-blk-pci,variant=aux,drive=aux \
    -drive file=root,if=none,id=root,format=raw \
    -device vmapple-virtio-blk-pci,variant=root,drive=root

With all these in place, you should be able to see macOS booting
successfully.

Known issues:
 - Currently only macOS 12 guests are supported. The boot process for
   13+ will need further investigation and adjustment.

Signed-off-by: Alexander Graf <graf@amazon.com>
Co-authored-by: Phil Dennis-Jordan <phil@philjordan.eu>
Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Tested-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-ID: <20241223221645.29911-15-phil@philjordan.eu>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
2025-03-04 14:45:34 +01:00
..
arm hw/vmapple/vmapple: Add vmapple machine type 2025-03-04 14:45:34 +01:00
devices hw/nvme: Add OCP SMART / Health Information Extended Log Page 2025-02-25 12:27:21 +01:00
i386 docs/nitro-enclave: Clarify Enclave and Firecracker relationship 2025-01-13 17:16:04 +01:00
loongarch roms: Support compile the efi bios for loongarch 2024-09-17 10:26:26 +02:00
openrisc docs/system: openrisc: Add OpenRISC documentation 2022-09-04 07:02:57 +01:00
ppc ppc/pseries: Add Power11 cpu type 2024-11-04 09:12:47 +10:00
riscv hw/riscv: Add Microblaze V generic board 2024-12-20 11:22:47 +10:00
s390x docs/system/s390x/bootdevices: Update loadparm documentation 2024-11-18 10:54:42 +01:00
authz.rst
barrier.rst
bootindex.rst docs/system/bootindex: Make it clear that s390x can also boot from virtio-net 2024-11-18 10:54:42 +01:00
confidential-guest-support.rst
cpu-hotplug.rst docs/system/cpu-hotplug: Update example's socket-id/core-id 2024-10-29 15:04:46 +00:00
cpu-models-mips.rst.inc
cpu-models-x86-abi.csv docs: re-generate x86_64 ABI compatibility CSV 2024-02-09 12:48:11 +00:00
cpu-models-x86.rst.inc docs: Add GNR, SRF and CWF CPU models 2025-01-23 11:50:53 +01:00
device-emulation.rst hw/misc/ivshmem-flat: Add ivshmem-flat device 2024-12-31 21:21:27 +01:00
device-url-syntax.rst.inc block/gluster: Remove deprecated RDMA protocol handling 2024-04-24 16:03:38 +02:00
gdb.rst docs/system: clarify limits of using gdbstub in system emulation 2023-11-23 14:10:06 +00:00
generic-loader.rst
guest-loader.rst docs/system: remove excessive punctuation from guest-loader docs 2023-04-27 14:58:41 +01:00
images.rst docs: add a glossary 2025-01-17 10:45:54 +00:00
index.rst Revert "docs: Document composable SR-IOV device" 2024-08-01 04:32:00 -04:00
introduction.rst target/arm: change default pauth algorithm to impdef 2025-01-13 12:35:34 +00:00
invocation.rst qemu-options: Clarify handling of commas in options parameters 2023-12-20 10:29:23 +01:00
keys.rst docs: Remove unused weirdly-named cross-reference targets 2023-05-12 15:43:38 +01:00
keys.rst.inc docs/system: Update description for input grab key 2024-02-22 08:58:43 +03:00
linuxboot.rst docs: Remove unused weirdly-named cross-reference targets 2023-05-12 15:43:38 +01:00
managed-startup.rst
monitor.rst
multi-process.rst docs: fix multi-process QEMU documentation 2023-06-07 10:21:53 -04:00
mux-chardev.rst
mux-chardev.rst.inc
pr-manager.rst
qemu-block-drivers.rst
qemu-block-drivers.rst.inc docs/devel: add a codebase section 2025-01-17 10:45:49 +00:00
qemu-cpu-models.rst
qemu-manpage.rst qemu-options: Clarify handling of commas in options parameters 2023-12-20 10:29:23 +01:00
replay.rst target/nios2: Remove the deprecated Nios II target 2024-04-24 16:03:38 +02:00
secrets.rst
security.rst
target-arm.rst hw/vmapple/vmapple: Add vmapple machine type 2025-03-04 14:45:34 +01:00
target-avr.rst
target-i386-desc.rst.inc docs: i386: pc: Avoid mentioning limit of maximum vCPUs 2024-06-08 10:33:38 +02:00
target-i386.rst docs/nitro-enclave: Documentation for nitro-enclave machine type 2024-10-31 18:28:33 +01:00
target-m68k.rst
target-mips.rst docs/system: Remove "mips" board from target-mips.rst 2023-03-07 18:08:12 +01:00
target-openrisc.rst docs/system: openrisc: Add OpenRISC documentation 2022-09-04 07:02:57 +01:00
target-ppc.rst docs/system/ppc: Document running Linux on AmigaNG machines 2024-03-13 02:47:04 +10:00
target-riscv.rst hw/riscv: Add Microblaze V generic board 2024-12-20 11:22:47 +10:00
target-rx.rst
target-s390x.rst docs/s390x/cpu topology: document s390x cpu topology 2023-10-20 07:16:53 +02:00
target-sparc.rst docs/system/target-sparc: Improve the Sparc documentation 2024-05-05 21:02:48 +01:00
target-sparc64.rst
target-xtensa.rst
targets.rst docs/system: openrisc: Add OpenRISC documentation 2022-09-04 07:02:57 +01:00
tls.rst
virtio-net-failover.rst
vm-templating.rst docs: Start documenting VM templating 2023-09-19 10:23:21 +02:00
vnc-security.rst