Use virtio-gpu with viogpudo on Arm64 Windows 11
Replace ramfb with virtio-gpu-pci at 2048x1280 and install the viogpudo driver from the VirtIO ISO. ramfb has a fixed mode, and keeping both adapters left Windows with a second, fixed-mode monitor. Windows Setup and the base image have no viogpudo driver, so on the launch that creates the system disk the launcher also adds a ramfb ahead of the config files. The display window shows the first GPU. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
361ecd977a
commit
c139c566d0
4 files changed
+24
-10
No files matched your search
@@ -24,11 +24,15 @@
|
|||||||
driver = "virtio-net-pci"
|
driver = "virtio-net-pci"
|
||||||
netdev = "net0"
|
netdev = "net0"
|
||||||
|
|
||||||
# Unlike q35, "virt" has no default GPU or keyboard. ramfb is used rather than
|
# Unlike q35, "virt" has no default GPU or keyboard. virtio-gpu is the only
|
||||||
# virtio-gpu because the firmware's virtio-gpu output freezes at the Windows
|
# display, driven by viogpudo (installed by Configure-Windows.ps1). ramfb is not
|
||||||
# boot manager; Windows drives either one through its basic display driver.
|
# 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 and 2048x1280 but not 2560x1600.
|
||||||
[device "gpu0"]
|
[device "gpu0"]
|
||||||
driver = "ramfb"
|
driver = "virtio-gpu-pci"
|
||||||
|
xres = "2048"
|
||||||
|
yres = "1280"
|
||||||
|
|
||||||
[device "kbd0"]
|
[device "kbd0"]
|
||||||
driver = "usb-kbd"
|
driver = "usb-kbd"
|
||||||
@@ -24,11 +24,15 @@
|
|||||||
driver = "virtio-net-pci"
|
driver = "virtio-net-pci"
|
||||||
netdev = "net0"
|
netdev = "net0"
|
||||||
|
|
||||||
# Unlike q35, "virt" has no default GPU or keyboard. ramfb is used rather than
|
# Unlike q35, "virt" has no default GPU or keyboard. virtio-gpu is the only
|
||||||
# virtio-gpu because the firmware's virtio-gpu output freezes at the Windows
|
# display, driven by viogpudo (installed by Configure-Windows.ps1). ramfb is not
|
||||||
# boot manager; Windows drives either one through its basic display driver.
|
# 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 and 2048x1280 but not 2560x1600.
|
||||||
[device "gpu0"]
|
[device "gpu0"]
|
||||||
driver = "ramfb"
|
driver = "virtio-gpu-pci"
|
||||||
|
xres = "2048"
|
||||||
|
yres = "1280"
|
||||||
|
|
||||||
[device "kbd0"]
|
[device "kbd0"]
|
||||||
driver = "usb-kbd"
|
driver = "usb-kbd"
|
||||||
+6
-1
@@ -372,7 +372,12 @@ for label, host_port, guest_port in (("RDP", rdp_port, 3389), ("SSH", ssh_port,
|
|||||||
else:
|
else:
|
||||||
forwards.append(f"hostfwd=tcp::{host_port}-:{guest_port}")
|
forwards.append(f"hostfwd=tcp::{host_port}-:{guest_port}")
|
||||||
|
|
||||||
qemu_args = [
|
# Neither Windows Setup nor the base image has the viogpudo driver yet, and
|
||||||
|
# without it the virtio-gpu in the config file shows "display output is not
|
||||||
|
# active". ramfb shows the screen until Configure-Windows.ps1 installs it. It
|
||||||
|
# must be created before the virtio-gpu: the display window shows the first GPU.
|
||||||
|
qemu_args = ["-device", "ramfb"] if installing and host_arch == "arm64" else []
|
||||||
|
qemu_args += [
|
||||||
"-readconfig", str(qemu_config),
|
"-readconfig", str(qemu_config),
|
||||||
"-readconfig", str(qemu_platform_config),
|
"-readconfig", str(qemu_platform_config),
|
||||||
# "max" is the host CPU under KVM/HVF and the fullest model under TCG.
|
# "max" is the host CPU under KVM/HVF and the fullest model under TCG.
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ function Install-VirtIOArm64Drivers {
|
|||||||
@{ Folder = 'vioserial'; Inf = 'vioser.inf' },
|
@{ Folder = 'vioserial'; Inf = 'vioser.inf' },
|
||||||
@{ Folder = 'Balloon'; Inf = 'balloon.inf' },
|
@{ Folder = 'Balloon'; Inf = 'balloon.inf' },
|
||||||
@{ Folder = 'viorng'; Inf = 'viorng.inf' },
|
@{ Folder = 'viorng'; Inf = 'viorng.inf' },
|
||||||
@{ Folder = 'vioinput'; Inf = 'vioinput.inf' }
|
@{ Folder = 'vioinput'; Inf = 'vioinput.inf' },
|
||||||
|
@{ Folder = 'viogpudo'; Inf = 'viogpudo.inf' }
|
||||||
)
|
)
|
||||||
|
|
||||||
$installed = 0
|
$installed = 0
|
||||||
|
|||||||
Reference in new issue
Block a user