|
|
本帖最后由 ctx 于 2026-7-28 19:10 编辑
gskj 发表于 2026-7-28 16:12
MSI的400系主板已经不支持在核显的情况下开启csm了(估计BIOS只有UEFI OptionRom)
另外在核显下测试卡logo ...
情况较为复杂。前期我分析的结论是:
UEFISeven是安装假的INT10,并不保证假INT10提供的地址一定对应VGA帧缓冲区。
假INT10的作用除了尝试显示外,还有防止hal.dll沙箱卡死作用。
flashbootpro从某一版本开始加入VGA仲裁。之前的版本是把GOP帧缓冲区喂给INT10,这是它有些机器能进入安全模式的原因;它还会挂钩UEFI相关Protocol,确保win7原生分辨率1024*768不被后续程序修改。从某一版本开始加入了64位地址支持,应和above 4G相关,这应该也是UEFISeven不具备的。
3.4a之前版本的flashbootpro有些机器会遇到红字错误而失败,是因为BIOS里有软件GOP进行干扰,3.4a版本修复。
修改版bootmgfw.efi只有VGA仲裁,不含其他作用(例如INT10)。
VGA仲裁的效果是对于独立显卡(B/D/F的B非0),设置它所在的PCI桥的配置空间,使得该桥声明VGA资源需求(2套IO端口和1个内存地址范围),由pci.sys向ntoskrnl.exe生成的顶级仲裁器申请并分配成功;待独显启动时,由于dxgkrnl.sys声明需要VGA资源,该桥把资源给了独显,确保正常启动。
因此VGA仲裁对核显(0/2/0)无效。
又由于独显所在桥把VGA资源占领,在某些情形下核显经dxgkrnl.sys启动时,要求VGA资源而未得到,出现代码12。
我在UEFI模式下,核显独显都启用,确实遇到过两者抢VGA资源的问题(独显占据,核显代码12),就修改了dxgkrnl.sys,使得它俩都能工作。
只有显卡KMD和UMD都正常工作,才能3D。dxdiag.exe可检测。
只有鼠标指针而黑屏我也遇到过,很有可能是显卡驱动KMD本身的问题(如Allocation创建失败)。
安全模式,或者显卡驱动失败时,实际上是靠VgaSave服务显示,它把调用INT10得到的缓冲区地址给了win32k.sys,由后者进行CPU渲染(其实就是内存复制操作)。在这种情况下,缓冲区地址正确与否决定了能否亮机。 |
|