都在说各种 M1 的使用体验,我来说点别的(这机器拿到之后本来就打算是纯折腾用的)。本文基本上就是个 Application Note,供打算写 VM 的人做参考。
macOS on Apple Silicon 有两个虚拟化的框架,一个是 high-level 的 (Virtualization.Framework),一个是 low-level 的 (Hypervisor.Framework)。前者暴露了一系列 VirtIO 设备和经过包装的 Bootloader,后者提供了细粒度的虚拟硬件控制,需要自己处理 vCPU vmexit/interrupt/timer 和内存的映射。
在 Apple Silicon 上调用这两个框架需要合适的 entitlements (com.apple.security.hypervisor
,也有可能需要 com.apple.vm.networking
)
这里有一个非常简单的 SimpleVM 的实现。
Virtualization.Framework 的使用方法非常简单:
Virtualization.Framework 的虚拟了以下 vCPU 和外设:
Virtualization.Framework 的私有类里面还暗示了 ARM PL011 UART, 16550 UART, FrameBuffer, Virtual USB, EFI Bootloader 之类的存在,但是目前它们是坏的,不要尝试了。
Red Hat 的人跟我说他们发现 Virtualization.Framework 存在一些潜在的内存问题,所以可能它还需要一段时间来稳定一下
提供了细粒度的硬件控制。一些细节如下:
eret_el1 += 4
(trapped SMC 不会自动把 eret 设置到下一条指令,和 HVC 不同)。在虚拟机的 vmexit handler 里直接设置 EL1 的 PC 即可。hv_vcpu_set_trap_debug_exceptions
esr_el2
里的 ec
部分,一般来说只需要处理一个子集 (trapped register, stage 2 translation, hvc/smc, MMIO, debug): https://developer.arm.com/docs/ddi0595/h/aarch64-system-registers/esr_el2 ; Timer 可以看 Apple 文档一个 Hypervisor.Framework 使用的玩具例子可以看这里: https://gist.github.com/imbushuo/51b09e61ecd7b7ac063853ad65cedf34
Qemu + HVF 支持有人在做了,另外 Windows 早就有人偷偷跑过了
1
chouch0u 2020-11-26 22:14:41 +08:00
围观大佬。
|
2
minamike 2020-11-26 22:18:24 +08:00
Misc 里面说的是 UTM 吗
|
3
imbushuo OP Errata: `eret_el1` -> `elr_el2`
|
5
zckevin 2020-11-26 22:21:12 +08:00
围观学习
|
8
HandSonic 2020-11-27 00:33:18 +08:00
围观大佬
|
9
lightingtime 2020-11-27 00:55:56 +08:00
具备大佬这样的知识框架应该如果学习。
|
12
vk42 2020-11-27 05:02:22 +08:00
@imbushuo TCG 和 HVF 定位是不同的啊,HVF 对 MacOS 相当于 Linux 的 KVM,不懂为啥要黑 TCG……
|
13
hyln9 2020-11-27 06:54:50 +08:00
|
14
lqf96 2020-11-27 09:29:26 +08:00
|