我在 Dell Inpiron 15 7548 上运行 Xubuntu 18.04。机器集成了 HD 5500 显卡和专用的 AMD R7 卡。我曾多次尝试访问我的专用卡,但最终都放弃了,所以我真的很想尝试彻底解决这个问题,以便真正使用我的硬件。
首先,两张卡都能被正常检测到:
narameh@Hydrogen:~$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 5500 (rev 09)
08:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Opal XT [Radeon R7 M265/M365X/M465] (rev ff)
我尝试按照戴尔自己的指南操作,了解如何使用 switcheroo 将整个系统切换到专用卡,网址为: https://www.dell.com/support/article/uk/en/ukbsdt1/sln298475/a-guide-to-hybrid-video-on-dell-pcs-with-an-ubuntu-operating-system?lang=en
以下是一些输出:
VGA 切换已启用:
narameh@Hydrogen:~$ grep -i switcheroo /boot/config-*
/boot/config-4.15.0-50-generic:CONFIG_VGA_SWITCHEROO=y
/boot/config-4.15.0-51-generic:CONFIG_VGA_SWITCHEROO=y
切换文件存在:
narameh@Hydrogen:~$ sudo ls -l /sys/kernel/debug/vgaswitcheroo/switch
-rw-r--r-- 1 root root 0 Jun 12 16:07 /sys/kernel/debug/vgaswitcheroo/switch
默认状态:
narameh@Hydrogen:~$ sudo cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :DynOff:0000:08:00.0
本教程假设它是 Pwr 或 Off,但由于这是一个混合系统,对我来说它是 DynOff。因此,当我尝试按照说明打开断开连接的 GPU 时,什么也没发生,因为它并没有真正断开连接,只是动态关闭。这必须以 root 身份进行,否则由于缺乏权限,我无法回显。
narameh@Hydrogen:~$ sudo su
root@Hydrogen:/home/narameh# echo ON > /sys/kernel/debug/vgaswitcheroo/switch
root@Hydrogen:/home/narameh# cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :DynOff:0000:08:00.0
接下来,我尝试使用 DRI_PRIME 在我的 AMD 卡上运行某些东西,看看能否让它启动。我可以运行
DRI_PRIME=1 glxinfo
在一个终端窗口中,并发送垃圾邮件
narameh@Hydrogen:~$ sudo cat /sys/kernel/debug/vgaswitcheroo/switch
在另一个终端中。但是,第一个终端随后输出大量错误,我们又回到了 DynOff。错误输出的 Pastebin:https://pastebin.com/gJ4StVLS
通过谷歌搜索错误代码,我得到了这个有类似问题的主题:https://www.linuxquestions.org/questions/slackware-14/current-14-2-and-dri-3-and-dri_prime-ain%27t-working-4175578108/ 关于此海报的更多信息请见此处:https://kaosx.us/docs/hybrid_gfx/
按照那里的步骤操作,我会得到以下内容
DRI 似乎还不错:
narameh@Hydrogen:~$ cat /var/log/Xorg.0.log | grep DRI
[ 45.527] (II) RADEON(G0): [DRI2] Setup complete
[ 45.527] (II) RADEON(G0): [DRI2] DRI driver: radeonsi
[ 45.527] (II) RADEON(G0): [DRI2] VDPAU driver: radeonsi
[ 46.672] (II) modeset(0): [DRI2] Setup complete
[ 46.672] (II) modeset(0): [DRI2] DRI driver: i965
[ 46.672] (II) modeset(0): [DRI2] VDPAU driver: i965
[ 46.704] (II) GLX: Initialized DRI2 GL provider for screen 0
narameh@Hydrogen:~$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x66 cap: 0x9, Source Output, Sink Offload crtcs: 3 outputs: 2 associated providers: 1 name:modesetting
Provider 1: id: 0x41 cap: 0x6, Sink Output, Source Offload crtcs: 2 outputs: 0 associated providers: 1 name:OLAND @ pci:0000:08:00.0
narameh@Hydrogen:~$ xrandr --setprovideroffloadsink 0x41 0x66
narameh@Hydrogen:~$
请注意,它没有抛出任何错误,因此此命令似乎工作正常。当我尝试在任一卡上运行时,英特尔板载工作正常:
narameh@Hydrogen:~$ DRI_PRIME=0 glxinfo | grep "OpenGL vendor string"
OpenGL vendor string: Intel Open Source Technology Center
但 AMD 仍然抛出同样的错误:https://pastebin.com/W56z6z3L
最后,线程中的用户将他的问题追溯到错误的内核提交并回滚,但由于a)这是2016年的一个线程,并且b)我不是足够高级的用户来弄乱我的内核,所以这对我来说不是一个选择。
我可以找到多个其他类似的错误,这些错误似乎与内核版本有关(例如https://bugs.freedesktop.org/show_bug.cgi?id=102800在 Ubuntu 17.01 或这个https://bugs.freedesktop.org/show_bug.cgi?id=94874)
在这两个主题中,都建议将 radeon.nopm=0 添加到内核启动中,但由于我对自己正在做的事情了解不够,所以我犹豫是否在没有指导的情况下尝试这样做。
我希望这篇文章能让您清楚,我已经投入了精力尝试自己解决这个问题,但我的知识有限,我不想因为更改我不理解或无法撤消的内容而弄乱我的系统,如果我最终因此而启动到黑屏。如果能得到更高级的人的帮助,我将非常感激。
tldr:独立 AMD 处于 DynOff 状态,无法通过 VGA_switcheroo 强制开启。DRI_PRIME 可以与独立显卡通信,但会出现错误似乎是内核问题吗?用户的知识已经所剩无几,而且害怕破坏东西。希望得到帮助。
编辑:意识到包括内核版本等会很有用:
narameh@Hydrogen:~$ uname -r
4.15.0-51-generic
narameh@Hydrogen:~$ lspci -nnk | grep -i vga -A3
00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 5500 [8086:1616] (rev 09)
Subsystem: Dell HD Graphics 5500 [1028:066f]
Kernel driver in use: i915
Kernel modules: i915
--
08:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Opal XT [Radeon R7 M265/M365X/M465] [1002:6604] (rev ff)
Kernel driver in use: radeon
Kernel modules: radeon, amdgpu
编辑 2:补充一点也很有用,我的 bios 中没有打开/关闭 GPU 的选项。根本没有视频相关选项。
答案1
令我完全困惑的是,它现在可以正常工作了。请记住,一年多来我一直在尝试让它时断时续地工作。但从来没有成功过。今天,我决定在写完这篇文章后休息一下。我重新启动以仔细检查我的 bios 选项,然后清除我未使用的 ppa。然后我运行 DRI_PRIME=1 glxinfo 以查看是否可以从错误日志中获取更多信息,结果它就……起作用了。老实说,我不知道发生了什么。无论是重新启动还是删除一些未使用的 ppa 都不应该对此产生任何影响。WTF。不过很高兴它现在可以正常工作了!认为这个问题已经解决了。