0%

如何在MacBook上使用ARM嵌套虚拟化

基本逻辑

Apple从M2芯片开始就支持了ARM的嵌套虚拟化特性,本文记录在M5芯片上使用嵌套虚拟化的
步骤。

测试的基本环境是:host就用本机的macOS 26.4;第一层虚机(L1)使用主线QEMU(11.1.50),
最新主线QEMU在HVF(类似Linux KVM,苹果的内核虚拟机)中支持了ARM版本的嵌套虚拟化,
支持的补丁可以参考这里; L1的文件系统使用openEuler的qcow2文件系统,也可以使用其它
发行版的qcow2文件系统。

使能嵌套虚拟化后,L1虚机直接就是一个基于EL2带/dev/kvm的完整系统,在L1系统里可以
方便地验证需要KVM的测试场景,比如可以直接在L1测试验证AI沙箱场景,会方便很多。

具体命令和注意事项直接如下。

编译QEMU以及L1启动命令

编译命令:

1
2
3
4
5
6
7
// QEMU源码目录
./configure \
--target-list=aarch64-softmmu,arm-softmmu \
--enable-hvf \
--enable-virtfs \
--disable-werror
make -j10

L1启动命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
~/repos/qemu/build/qemu-system-aarch64 \
-machine virt,gic-version=3,virtualization=on \
-cpu host \
-accel hvf \
-boot menu=on,splash-time=0 \
-m 16G \
-smp 10 \
-drive file=~/ISO/openEuler-24.03-LTS-SP2-aarch64.qcow2,format=qcow2,if=virtio \
-netdev user,id=net0,hostfwd=tcp::2222-:22,hostfwd=tcp::4000-:4000,hostfwd=udp::123-:123 \
-device virtio-net-pci,netdev=net0 \
-nographic \
-bios /opt/homebrew/share/qemu/edk2-aarch64-code.fd \
-fsdev local,id=fsdev0,path=/Users/sherlock,security_model=none \
-device virtio-9p-pci,fsdev=fsdev0,mount_tag=hostshare \
-rtc clock=host

注意,需要增加:-boot menu=on,splash-time=0,否则QEMU启动卡在BIOS阶段无法进入guest
内核。

进入L1系统后,可以看见/dev/kvm,并且可以继续启动L2虚机。