|
From: | Alexander Graf |
Subject: | Re: [PATCH 00/12] Introduce new vmapple machine type |
Date: | Wed, 21 Jun 2023 15:23:01 +0200 |
User-agent: | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 |
Hi Mads, On 20.06.23 13:17, Mads Ynddal wrote:
On 15 Jun 2023, at 00.40, Alexander Graf <graf@amazon.com> wrote: This patch set introduces a new ARM and HVF specific machine type called "vmapple". It mimicks the device model that Apple's proprietary Virtualization.Framework exposes, but implements it in QEMU. With this new machine type, you can run macOS guests on Apple Silicon systems via HVF. To do so, you need to first install macOS using Virtualization.Framework onto a virtual disk image using a tool like macosvm (https://github.com/s-u/macosvm) $ macosvm --disk disk.img,size=32g --aux aux.img \ --restore UniversalMac_12.0.1_21A559_Restore.ipsw vm.json Then, extract the ECID from the installed VM: $ cat "$DIR/macosvm.json" | python3 -c \ 'import json,sys;obj=json.load(sys.stdin);print(obj["machineId"]) | \ base64 -d | plutil -extract ECID raw -Beware, that the file will be called 'vm.json' and DIR is undefined following the previous line. Also, it's missing a single-quote at the end of `["machineId"])`.
Thanks :)
In addition, cut off the first 16kb of the aux.img: $ dd if=aux.img of=aux.img.trimmed bs=$(( 0x4000 )) skip=1 Now, you can just launch QEMU with the bits generated above: $ qemu-system-aarch64 -serial mon:stdio \ -m 4G \ -M vmapple,uuid=6240349656165161789 \ -bios /Sys*/Lib*/Fra*/Virtualization.f*/R*/AVPBooter.vmapple2.bin \ -pflash aux.img.trimmed \ -pflash disk.img \ -drive file=disk.img,if=none,id=root \ -device virtio-blk-pci,drive=root,x-apple-type=1 \ -drive file=aux.img.trimmed,if=none,id=aux \ -device virtio-blk-pci,drive=aux,x-apple-type=2 \ -accel hvf -no-rebootJust for clarity, I'd add that the 'vmapple,uuid=...' has to be set to the ECID the previous step. You haven't defined a display, but I'm not sure if that is on purpose to show a minimal setup. I had to add '-display sdl' for it to fully work.
Weird, I do get a normal cocoa output screen by default.
There are a few limitations with this implementation: - Only runs on macOS because it relies on ParavirtualizesGraphics.Framework - Something is not fully correct on interrupt delivery or similar - the keyboard does not work - No Rosetta in the guest because we lack the private entitlement to enable TSOWould it be possible to mitigate the keyboard issue using an emulated USB keyboard? I tried poking around with it, but with no success.
Unfortunately I was not able to get USB stable inside the guest. This may be an issue with interrupt propagation: With usb-kbd I see macOS not pick up key up or down events in time.
Alex Amazon Development Center Germany GmbH Krausenstr. 38 10117 Berlin Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B Sitz: Berlin Ust-ID: DE 289 237 879
[Prev in Thread] | Current Thread | [Next in Thread] |