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 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 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 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 hardware-specific drivers, no machine identity. Like a cloud image, each VM is
configured on its first boot, from the seed ISO. 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 (`seediso/windows11/NN-*.bat` and `.ps1`) to the desktop folder `Tools`. Later
starts do not mount the seed ISO. starts do not mount the seed ISO.
Because the image has no VirtIO drivers, the VM only uses devices that Windows The base image carries the VirtIO drivers (`build-windows-base.sh` installs them
has inbox drivers for: an IDE disk and e1000e NIC on amd64, an NVMe disk, e1000e from the virtio-win ISO before generalizing), so on arm64 the VM uses virtio-net and
NIC and ramfb display on arm64 (a fixed-size framebuffer there). The SPICE 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 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 clipboard integration and the guest agent are not available unless you install
those tools in the VM yourself. those tools in the VM yourself.
+10 -5
View File
@@ -19,15 +19,20 @@
serial = "win11disk" serial = "win11disk"
bootindex = "1" bootindex = "1"
# Windows has no inbox driver for virtio-net or virtio-gpu, and the base image # The base image carries the VirtIO drivers (build-windows-base.sh installs them
# contains no VirtIO drivers, so the network card is an Intel e1000e and the # from the virtio-win ISO), so the VM uses virtio-net and virtio-gpu. virtio-gpu
# display is ramfb (a fixed-size framebuffer). # 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"] [device "nic0"]
driver = "e1000e" driver = "virtio-net-pci"
netdev = "net0" netdev = "net0"
[device "gpu0"] [device "gpu0"]
driver = "ramfb" driver = "virtio-gpu-pci"
xres = "2304"
yres = "1440"
[device "kbd0"] [device "kbd0"]
driver = "usb-kbd" driver = "usb-kbd"
+10 -5
View File
@@ -18,15 +18,20 @@
serial = "win11disk" serial = "win11disk"
bootindex = "1" bootindex = "1"
# Windows has no inbox driver for virtio-net or virtio-gpu, and the base image # The base image carries the VirtIO drivers (build-windows-base.sh installs them
# contains no VirtIO drivers, so the network card is an Intel e1000e and the # from the virtio-win ISO), so the VM uses virtio-net and virtio-gpu. virtio-gpu
# display is ramfb (a fixed-size framebuffer). # 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"] [device "nic0"]
driver = "e1000e" driver = "virtio-net-pci"
netdev = "net0" netdev = "net0"
[device "gpu0"] [device "gpu0"]
driver = "ramfb" driver = "virtio-gpu-pci"
xres = "2048"
yres = "1280"
[device "kbd0"] [device "kbd0"]
driver = "usb-kbd" 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. seed ISO.
Make the base image once with vm-images/build-windows-base.sh; it installs 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 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 Windows plus the VirtIO drivers (no account, no SSH, no other
the devices in qemu/windows11 are ones Windows has inbox drivers for. hardware-specific drivers).
The VM hardware (accelerator, memory, CPUs, drives, devices) is defined in 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 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 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