我有一块 MSI B450 Tomahawk Max 主板,里面有两个 GPU。我的“主”GPU 是 NVidia GeForce GTX 1660,位于主 GPU 插槽(PCI_E1,最靠近 CPU 并以 16 倍速度运行)。我的第二个 GPU 是一个便宜的小型 AMD Radeon HD 5450,位于 PCI_E4,这是唯一可以容纳全尺寸卡的插槽。我的锐龙 5 没有集成显卡功能。
我想让我的 X windows 系统只使用 Radeon 卡,这样我的 NVidia 就可以腾出来做其他事情,比如 GPU 直通到 VM 等。我在使用它作为参考时遵循了本指南。我设法完成了所有设置,以便我的 nvidia 卡在启动时被 vfio-pci 存根抓取,并且正确的驱动程序最初被列入黑名单,但以后可以加载。一切似乎都很好,除了...我无法在 nVidia 卡被淘汰的情况下启动 X。我的控制台上出现了一个空白的黑屏。我可以 ssh 进入盒子,但控制台是空白的。
具有讽刺意味的是,如果我改变一些事情以使 Radeon 卡被淘汰,那么 X 开始就好了。我还可以同时运行两张卡,每张卡都驱动不同的显示器。但是我不能让 X 开始只使用 Radeon 卡。
我确实尝试了参考页面上给出的这个解决方案,但它不起作用 - 我最终遇到了完全相同的情况。它似乎完全没有效果。
我针对以下两种情况发布了我的 Xorg.0.log 文件。Radeon-stub 可以工作。Nvidia-stub 一个不起作用 - 它以抱怨没有配置屏幕结束。我试图通过它寻找线索,但 X 的配置对我来说非常不透明,因为所有自动配置都在幕后进行。我无法弄清楚为什么任何事情都有效或失败。
如果我知道如何查看我当前的 X 配置,那就太好了,所以至少我知道“好”的样子。
如何强制 X 仅使用我的 Radeon GPU?
我的两个存根配置的内核参数如下:
英伟达存根:
linux /boot/vmlinuz-5.4.0-48-generic root=UUID=09d61674-efb6-441a-b9ab-f958990e5c31 ro debug splash dis_ucode_ldr vfio-pci.ids=10de:2184,10de:1aeb,10de:1aec,10de:1aed module_blacklist=nvidia,snd_hda_intel,i2c_nvidia_gpu vt.handoff=7
Radeon存根:
linux /boot/vmlinuz-5.4.0-48-generic root=UUID=09d61674-efb6-441a-b9ab-f958990e5c31 ro debug splash module_blacklist=radeon,snd_hda_intel vt.handoff=7
Radeon Stub Xorg.0.log (工作,在 Nvidia GPU 上使用)
Nvidia Stub Xorg.0.log (失败,说“屏幕 0 已删除,因为没有匹配的配置部分)
没有存根的Xorg.0.log,Nvidia 卡上的一台显示器,Radeon 卡上的一台显示器(工作正常)
编辑:根据@dirkt 的建议,我尝试将“nouveau”驱动程序添加到内核命令行黑名单中。Xorg.0 日志文件链接如下。它根本没有效果。
Nvidia Stub + 列入黑名单的 nouveau Xorg.0.log
另外,请注意,此时我还没有对我的虚拟机做任何事情。我只是想让 X 在不使用 Nvidia 卡的情况下运行。
我还尝试从我的系统中删除 nvidia 卡。X 可以工作,但我当然不能通过不存在的视频卡将它们传递给 VM。我注意到这个日志文件和 Nvidia-stub 文件之间的区别是没有提到 nvidia/nouveau 驱动程序。比较这些日志文件还突出显示nvidia-stub中的第一个错误如下(我的 nvidia GPU 在 PCI 总线地址 26 上)。这几乎可以肯定是因为 nvidia 卡被淘汰了,但这正是我希望 X忽略它的原因。
(EE) [drm] Failed to open DRM device for pci:0000:26:00.0: -19
这是该日志文件: