Use virtio-net and virtio-gpu on arm64 again

The base image now carries the VirtIO drivers, which restores the 2304x1440
display that ramfb had lost.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
guofangandClaude Sonnet 5.5 committed 2026-11-02 22:09:07 +08:00
1 parent d639e1f785
commit fc8134ecf9
5 files changed
+27 -17

No files matched your search

+4 -4
View File
@@ -167,7 +167,7 @@ from the shared Windows 11 QCOW2 base image:
It creates a persistent 64G disk at `vm/windows11/disk.qcow2` as a QCOW2
overlay on the base image and nothing else: the launcher only creates the
differential disk and starts QEMU. The base image is generic and holds nothing
but Windows (see `vm-images/README.md`): no account, no SSH, no VirtIO or other
but Windows (see `vm-images/README.md`): no account, no SSH, no other
hardware-specific drivers, no machine identity. Like a cloud image, each VM is
configured on its first boot, from the seed ISO.
@@ -186,9 +186,9 @@ turns off Windows Update and copies the numbered installer scripts
(`seediso/windows11/NN-*.bat` and `.ps1`) to the desktop folder `Tools`. Later
starts do not mount the seed ISO.
Because the image has no VirtIO drivers, the VM only uses devices that Windows
has inbox drivers for: an IDE disk and e1000e NIC on amd64, an NVMe disk, e1000e
NIC and ramfb display on arm64 (a fixed-size framebuffer there). The SPICE
The base image carries the VirtIO drivers (`build-windows-base.sh` installs them
from the virtio-win ISO before generalizing), so on arm64 the VM uses virtio-net and
virtio-gpu (2304x1440 on macOS); amd64 uses an IDE disk and an e1000e NIC. The SPICE
vdagent and QEMU Guest Agent come with the VirtIO guest tools, so host/guest
clipboard integration and the guest agent are not available unless you install
those tools in the VM yourself.
+10 -5
View File
@@ -19,15 +19,20 @@
serial = "win11disk"
bootindex = "1"
# Windows has no inbox driver for virtio-net or virtio-gpu, and the base image
# contains no VirtIO drivers, so the network card is an Intel e1000e and the
# display is ramfb (a fixed-size framebuffer).
# The base image carries the VirtIO drivers (build-windows-base.sh installs them
# from the virtio-win ISO), so the VM uses virtio-net and virtio-gpu. virtio-gpu
# is the only display, driven by viogpudo; ramfb is not added because Windows
# would then see a second adapter with a fixed-mode monitor. xres/yres set the
# preferred mode in the EDID (QEMU defaults to 1280x800); viogpudo accepted
# 1920x1200, 2048x1280 and 2304x1440 but not 2560x1440 or 2560x1600.
[device "nic0"]
driver = "e1000e"
driver = "virtio-net-pci"
netdev = "net0"
[device "gpu0"]
driver = "ramfb"
driver = "virtio-gpu-pci"
xres = "2304"
yres = "1440"
[device "kbd0"]
driver = "usb-kbd"
+10 -5
View File
@@ -18,15 +18,20 @@
serial = "win11disk"
bootindex = "1"
# Windows has no inbox driver for virtio-net or virtio-gpu, and the base image
# contains no VirtIO drivers, so the network card is an Intel e1000e and the
# display is ramfb (a fixed-size framebuffer).
# The base image carries the VirtIO drivers (build-windows-base.sh installs them
# from the virtio-win ISO), so the VM uses virtio-net and virtio-gpu. virtio-gpu
# is the only display, driven by viogpudo; ramfb is not added because Windows
# would then see a second adapter with a fixed-mode monitor. xres/yres set the
# preferred mode in the EDID (QEMU defaults to 1280x800); viogpudo accepted
# 1920x1200, 2048x1280 and 2304x1440 but not 2560x1440 or 2560x1600.
[device "nic0"]
driver = "e1000e"
driver = "virtio-net-pci"
netdev = "net0"
[device "gpu0"]
driver = "ramfb"
driver = "virtio-gpu-pci"
xres = "2048"
yres = "1280"
[device "kbd0"]
driver = "usb-kbd"
+2 -2
View File
@@ -97,8 +97,8 @@ scripts on the desktop). If the disk exists, start Windows normally, without the
seed ISO.
Make the base image once with vm-images/build-windows-base.sh; it installs
Windows from the ISO and generalizes the result. The base image contains only
Windows (no account, no SSH, no VirtIO or other hardware-specific drivers), so
the devices in qemu/windows11 are ones Windows has inbox drivers for.
Windows plus the VirtIO drivers (no account, no SSH, no other
hardware-specific drivers).
The VM hardware (accelerator, memory, CPUs, drives, devices) is defined in
qemu/windows11/config.ini, which is rendered to qemu.ini in the state directory and
loaded with QEMU's -readconfig, followed by qemu/windows11/<os>-<arch>.ini (os is linux or darwin, arch is amd64 or arm64, chosen from the host system and