CPU:4415U 系统:PVE 9.1.1飞牛:1.1.3105
系统之前配置好gvt-g后,升级最新版本1.1.3105后失效,使用之前的配置调整也没有恢复。lspci能看到显卡,但是ls /dev/dri/ 始终看不到renderD128。测试过修改grub文件和i915.conf文件,多种参数都测试了还是不行,而且系统开关机还耗时很长。
root@FnOS:/$ dmesg | grep -iE "i915|drm|gvt" | tail -n 20
······
[ 3.045998] i915 0000:00:10.0: [drm] Failed to find VBIOS tables (VBT)
[ 3.046041] i915 0000:00:10.0: [drm] *ERROR* DC state mismatch (0x0 -> 0x2)
······
"i915 0000:00:10.0: [drm] ERROR DC state mismatch (0x0 -> 0x2)"这个关键错误始终存在。
尝试重装页不行,可见问题复现:
root@FnOS:~#
······
[ 4.201338] i915 0000:06:10.0: [drm] Failed to find VBIOS tables (VBT)
[ 4.201378] i915 0000:06:10.0: [drm] *ERROR* DC state mismatch (0x0 -> 0x2)
······
root@FnOS:~# lspci
00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller
00:01.0 VGA compatible controller: Device 1234:1111 (rev 02)
······
06:10.0 VGA compatible controller: Intel Corporation HD Graphics 610 (rev 02)
······
root@FnOS:~# ls /dev/dri
by-path card0
测试修改i915.conf配置文件
root@FnOS:~# echo "options i915 enable_guc=0" > /etc/modprobe.d/i915.conf
root@FnOS:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.18.18-trim
enable_guc=0和2两个都试过了,没有变化。
前前后后测试了很久,还好是虚拟机架构,测试起来相对方便。最后通过AI测试到了解决办法,处理后可以正常使用gvt-g,测试影视直接调用GPU可以生效。
注意:需要使用i440fx架构,测试过Q35架构不适用。
根因:GVT-g 虚拟 GPU 缺少 DMC 微控制器硬件,i915 驱动在
intel_dmc_update_dc6_allowed_count() 中解引用空指针导致内核 Oops。
我重新新建了2个飞牛虚拟机:分别是SeaBIOS+i440fx和OVMF+q35,然后使用修改的两个i915.ko直接替换系统文件,然后执行update-initramfs -u后测试。
| 修复文件 |
SeaBIOS |
SeaBIOS |
OVMF |
OVMF |
| 版本/架构 |
i440fx |
q35 |
i440fx |
q35 |
| V1 |
正常启动,可以开启硬解 |
启动报错:[drm]ERROR DC state mismatch (0x0 -> 0x2) 无法启动系统,无法连接SSH(或者可能要等很久) |
正常启动,可以开启硬解 |
启动报错:[drm]ERROR DC state mismatch (0x0 -> 0x2) 无法启动系统,无法连接SSH(或者可能要等很久) |
| V2 |
正常启动,可以开启硬解 |
启动报错:[drm]ERROR DC state mismatch (0x0 -> 0x2) 无法启动系统,无法连接SSH(或者可能要等很久) |
正常启动,可以开启硬解 |
启动报错:[drm]ERROR DC state mismatch (0x0 -> 0x2) 无法启动系统,无法连接SSH(或者可能要等很久) |
有需要的可以留言,我可以提供i915.ko文件直接替换系统文件
#上传i915.ko文件到/tmp/目录
#备份原文件
cp /lib/modules/6.18.18-trim/kernel/drivers/gpu/drm/i915/i915.ko /lib/modules/6.18.18-trim/kernel/drivers/gpu/drm/i915/i915.kobak
#使用上传版本替换
sudo mv -f /tmp/i915.ko /lib/modules/6.18.18-trim/kernel/drivers/gpu/drm/i915/
#更新系统
sudo update-initramfs -u
#然后正常重启应该就可以了,其他的grub文件和i915.conf文件都不需要调整,安装系统时的默认配置就行。
#如果开机出现类似报错i915 0000:00:02.0: [drm] *ERROR* DC state mismatch (0x0 -> 0x2)
#启动系统的时候在grub位置按e编辑启动菜单,在“quiet splash"那行后面增加“modprobe.blacklist=i915”,然后 ctrl+x 临时启动后恢复原文件即可
没看到怎么放附件,请开发组人员参考,看能否修复处理
下面是AI整理的文档,有兴趣的可以使用带AI功能的SSH软件让它参考内容处理即可。(记得处理前进行系统备份或者快照处理、保险起见可用脱离硬盘)
GVT-g 虚拟GPU修复记录 v3(最终结论:Q35 不兼容 GVT-g)
主机信息
- 系统: 飞牛OS (FnOS)
- 内核版本: 6.18.18-trim
- GPU: Intel HD Graphics 610 [8086:5906] (GVT-g 虚拟)
- 虚拟化平台: PVE/QEMU
- 芯片组: i440fx(推荐)/ Q35(GVT-g 不可用)
- 修复日期: 2026-05-23
问题现象
i915 0000:00:02.0: [drm] *ERROR* DC state mismatch (0x0 -> 0x2)
BUG: kernel NULL pointer dereference, address: 0000000000000000
RIP: 0010:intel_dmc_update_dc6_allowed_count+0x16/0xa0 [i915]
- /dev/dri/ 仅有 card0,缺少 card1 和 renderD128
- GPU 不可用
根因
GVT-g 虚拟 GPU 缺少 DMC 微控制器硬件,i915 驱动在
intel_dmc_update_dc6_allowed_count() 中解引用空指针导致内核 Oops。
芯片组兼容性结论
| 方案 |
i440fx |
Q35 |
| 无补丁(原版 i915.ko) |
内核 Oops,GPU 不可用 |
内核 Oops,GPU 不可用 |
| v1:函数入口 ret(0x107130) |
正常启动,GVT-g 可用 |
DC state 卡死 |
| v2:崩溃点 jmp(0x107146) |
正常启动,GVT-g 可用 |
DC state 卡死 |
关键发现:
- v1 和 v2 在 Q35 上的表现完全一致,均卡在 DC state mismatch,与补丁内容无关
- 补丁只能避免空指针 Oops,无法解决 Q35 下 DC 状态机底层不兼容的问题
- Q35 芯片组与 GVT-g 虚拟 GPU 不兼容是根本原因
- i440fx 下无需补丁也可工作(仅需绕过空指针),补丁后完美运行
推荐方案:PVE 改用 i440fx 芯片组
新建虚拟机时
在 PVE 创建虚拟机的引导步骤中,Machine 选择 i440fx(而非默认的 Q35)。
补丁参考(仅 i440fx 可用)
i440fx 下任选 v1 或 v2 均可,效果相同。
v1:函数入口 ret
KVER=6.18.18-trim
MODPATH=/lib/modules/$KVER/kernel/drivers/gpu/drm/i915/i915.ko
cp $MODPATH $MODPATH.bak
printf "\xc3" | dd of=$MODPATH bs=1 seek=1077552 conv=notrunc
update-initramfs -u -k $KVER
v2:崩溃点 jmp
KVER=6.18.18-trim
MODPATH=/lib/modules/$KVER/kernel/drivers/gpu/drm/i915/i915.ko
cp $MODPATH $MODPATH.bak
printf "\xeb\x0c\x90\x90" | dd of=$MODPATH bs=1 seek=1077574 conv=notrunc
update-initramfs -u -k $KVER
GRUB 配置
# /etc/default/grub
GRUB_DEFAULT="gnulinux-6.18.18-trim-advanced-64818ccb-a77a-45a3-92ce-ff15b03bf258"
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="modprobe.blacklist=pcspkr"
# 修改后需执行
update-grub
验证结果
$ ls /dev/dri/
by-path card0 card1 renderD128 [OK]
$ dmesg | grep -iE "Oops|BUG|null pointer"
(无崩溃输出) [OK]
已知残余警告(无功能影响)
| 警告 |
说明 |
| DC state mismatch (0x0 -> 0x2) |
GVT-g 正常现象 |
| Failed to disable SAGV (-110) |
虚拟 GPU 无 SAGV 硬件 |
回滚方法
KVER=6.18.18-trim
MODPATH=/lib/modules/$KVER/kernel/drivers/gpu/drm/i915/i915.ko
cp $MODPATH.bak $MODPATH
update-initramfs -u -k $KVER
紧急恢复(补丁导致无法启动时)
- PVE 控制台重reboot,GRUB 菜单按 e 编辑启动项
- 在 linux 行末尾添加:modprobe.blacklist=i915
- Ctrl+X 启动进入系统
- 执行回滚命令恢复备份
注意
- 核心结论:Q35 与 GVT-g 不兼容,推荐改用 i440fx
- v1/v2 补丁仅对 i440fx 有效,对 Q35 卡死问题无效
- 内核升级后补丁失效,需重新执行
- GRUB_DEFAULT 的 ID 在内核升级后也会变化,需同步更新