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 docs: Drop deprecated 'props' from object-add 2021-11-22 15:02:38 +01:00
barrier.rst docs: Move user-facing barrier docs into system manual 2021-08-02 12:55:51 +01:00
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 docs: rstfy confidential guest documentation 2022-02-09 09:08:56 +01:00
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 docs/system: Update MIPS CPU documentation 2020-10-17 13:59:40 +02:00
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 docs: Move licence/copyright from HTML output to rST comments 2021-08-02 11:42:38 +01:00
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 docs/system: convert managed startup to rST. 2020-03-06 10:05:12 +00:00
monitor.rst docs: Get rid of the weird _005f links in the man page 2020-11-20 13:19:08 +01:00
multi-process.rst docs: fix multi-process QEMU documentation 2023-06-07 10:21:53 -04:00
mux-chardev.rst docs: Get rid of the weird _005f links in the man page 2020-11-20 13:19:08 +01:00
mux-chardev.rst.inc docs: Split out sections for the manpage into .rst.inc files 2020-03-06 11:06:55 +00:00
pr-manager.rst docs/system/pr-manager.rst: Fix minor docs nits 2020-11-23 11:10:04 +00:00
qemu-block-drivers.rst docs/system: standardize man page sections to --- with overline 2021-09-13 13:56:26 +02:00
qemu-block-drivers.rst.inc docs/devel: add a codebase section 2025-01-17 10:45:49 +00:00
qemu-cpu-models.rst docs/system: standardize man page sections to --- with overline 2021-09-13 13:56:26 +02:00
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 docs: document how to pass secret data to QEMU 2021-06-14 13:28:50 +01:00
security.rst docs/system: Convert security.texi to rST format 2020-03-06 10:05:12 +00:00
target-arm.rst hw/vmapple/vmapple: Add vmapple machine type 2025-03-04 14:45:34 +01:00
target-avr.rst docs: update to show preferred boolean syntax for -chardev 2021-02-25 14:14:33 +01:00
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 docs: Roll semihosting option information into qemu-options.hx 2020-03-06 10:05:12 +00:00
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 docs: Document the RX target 2020-06-22 18:37:12 +02:00
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 docs: Roll -prom-env and -g target-specific info into qemu-options.hx 2020-03-06 10:05:18 +00:00
target-xtensa.rst docs: Roll semihosting option information into qemu-options.hx 2020-03-06 10:05:12 +00:00
targets.rst docs/system: openrisc: Add OpenRISC documentation 2022-09-04 07:02:57 +01:00
tls.rst misc: fix commonly doubled up words 2022-08-01 11:58:02 +02:00
virtio-net-failover.rst docs: Move virtio-net-failover.rst into the system manual 2020-11-23 11:07:41 +00:00
vm-templating.rst docs: Start documenting VM templating 2023-09-19 10:23:21 +02:00
vnc-security.rst docs: recommend SCRAM-SHA-256 SASL mech instead of SHA-1 variant 2021-06-14 13:28:50 +01:00