amdgpu-pro-install 在带有 R9 285 和 RX 480 的 Ubuntu GNOME 16.04 上

KB_*_*KB_ 8 radeon drivers ubuntu-gnome gpu-drivers amd-graphics

我在AMD GPU PRO为 Ubuntu Gnome 16.04 系统安装驱动程序时遇到问题。安装并重启后屏幕变黑。GUI 模式下的图像不完整,大部分为黑色,登录屏幕的小部分闪烁。鼠标光标可见。

我可以访问tty并卸载它。

我从 AMD 官网链接下载了驱动程序。他们说它与我的显卡兼容:AMD Radeon™ R9 285 显卡。我按照网站上提供的安装指南进行操作。安装顺利完成,重启后黑屏。

跑步uname -r给出:

4.4.0-28-generic
Run Code Online (Sandbox Code Playgroud)

跑步dpkg -l amdgpu-pro给出:

dpkg-query: no packages found matching amdgpu-pro
Run Code Online (Sandbox Code Playgroud)

跑步./amdgpu-pro-install给出:

Reading package lists... Done
Building dependency tree
...........................
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gcc-5-base:i386 libdrm-radeon1:i386 libdrm2:i386 libelf1:i386
  libssl1.0.0:i386 libstdc++6:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386
  libxcb-sync1:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
  libxfixes3:i386 libxshmfence1:i386 libxxf86vm1:i386 linux-headers-4.4.0-21
  linux-headers-4.4.0-21-generic linux-image-4.4.0-21-generic
  linux-image-extra-4.4.0-21-generic
Use 'sudo apt autoremove' to remove them.
......................
Reading package lists... Done
deb file:/var/opt/amdgpu-pro/ ./ 
Reading package lists... Done
W: The repository 'file:/var/opt/amdgpu-pro ./ Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-4.4.0-21 linux-headers-4.4.0-21-generic
  linux-image-4.4.0-21-generic linux-image-extra-4.4.0-21-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  amdgpu-pro-clinfo amdgpu-pro-computing amdgpu-pro-core amdgpu-pro-firmware
  amdgpu-pro-graphics amdgpu-pro-libopencl-dev amdgpu-pro-libopencl-dev:i386
  amdgpu-pro-libopencl1 amdgpu-pro-libopencl1:i386 amdgpu-pro-opencl-icd
  amdgpu-pro-opencl-icd:i386 amdgpu-pro-vulkan-driver
  amdgpu-pro-vulkan-driver:i386 libdrm-amdgpu-pro-amdgpu1
  libdrm-amdgpu-pro-amdgpu1:i386 libdrm2-amdgpu-pro libdrm2-amdgpu-pro:i386
  libegl1-amdgpu-pro libegl1-amdgpu-pro:i386 libgbm1-amdgpu-pro:i386
  libgbm1-amdgpu-pro libgl1-amdgpu-pro-dev libgl1-amdgpu-pro-dev:i386
  libgl1-amdgpu-pro-dri libgl1-amdgpu-pro-dri:i386 libgl1-amdgpu-pro-glx:i386
  libgl1-amdgpu-pro-glx libgles2-amdgpu-pro libgles2-amdgpu-pro:i386
  libvdpau-amdgpu-pro libvdpau-amdgpu-pro:i386 xserver-xorg-video-amdgpu-pro
The following NEW packages will be installed
  amdgpu-pro amdgpu-pro-clinfo amdgpu-pro-computing amdgpu-pro-core
  amdgpu-pro-dkms amdgpu-pro-firmware amdgpu-pro-graphics
  amdgpu-pro-lib32:i386 amdgpu-pro-libopencl-dev amdgpu-pro-libopencl-dev:i386
  amdgpu-pro-libopencl1 amdgpu-pro-libopencl1:i386 amdgpu-pro-opencl-icd
  amdgpu-pro-opencl-icd:i386 amdgpu-pro-vulkan-driver
  amdgpu-pro-vulkan-driver:i386 libdrm-amdgpu-pro-amdgpu1
  libdrm-amdgpu-pro-amdgpu1:i386 libdrm2-amdgpu-pro libdrm2-amdgpu-pro:i386
  libegl1-amdgpu-pro libegl1-amdgpu-pro:i386 libgbm1-amdgpu-pro:i386
  libgbm1-amdgpu-pro libgl1-amdgpu-pro-dev libgl1-amdgpu-pro-dev:i386
  libgl1-amdgpu-pro-dri libgl1-amdgpu-pro-dri:i386 libgl1-amdgpu-pro-glx:i386
  libgl1-amdgpu-pro-glx libgles2-amdgpu-pro libgles2-amdgpu-pro:i386
  libvdpau-amdgpu-pro libvdpau-amdgpu-pro:i386 xserver-xorg-video-amdgpu-pro
0 to upgrade, 35 to newly install, 0 to remove and 0 not to upgrade.
Need to get 0 B/84.0 MB of archives.
After this operation, 400 MB of additional disk space will be used.
Run Code Online (Sandbox Code Playgroud)

问题:如何进行,我应该在哪里查找错误的依赖项或阻止驱动程序正常运行的东西,如何使其工作?

到目前为止,我已经尝试过这个:

  • 我已经用 HDMI 和 DisplayPort 进行了测试,两者都给出了相同的结果。

  • 尝试使用sudo dpkg --add-architecture i386sudo apt -get update

dmesg输出:(我包含了dmesg日志中可能有助于识别问题的片段。)

amdgpu: module verification failed: signature and/or required key missing - tainting kernel
[drm] amdgpu kernel modesetting enabled.
AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
AMD IOMMUv2 functionality not available on this system
fb: switching to amdgpudrmfb from VESA VGA
amdgpu 0000:01:00.0: Invalid ROM contents
ATOM BIOS: C76601
amdgpu 0000:01:00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M used)
amdgpu 0000:01:00.0: GTT: 2048M 0x0000000080000000 - 0x00000000FFFFFFFF
amdgpu 0000:01:00.0: amdgpu: using MSI.
[drm] amdgpu: irq initialized.
Can't find requested voltage id in vdd_dep_on_sclk table!
amdgpu: powerplay initialized
amdgpu 0000:01:00.0: fence driver on ring 0 use gpu addr 0x0000000080000008, cpu addr 0xffff880425497008
[drm] [FeatureOverride_overriden feature]   Overridden FEATURE_ENABLE_GPU_SCALING is enabled now
fbcon: amdgpudrmfb (fb0) is primary device
amdgpu 0000:01:00.0: fb0: amdgpudrmfb frame buffer device
[drm] Initialized amdgpu 3.2.0 20150101 for 0000:01:00.0 on minor 0
Run Code Online (Sandbox Code Playgroud)

KB_*_*KB_ 4

引用自http://www.phoronix.com/scan.php?page=article&item=amd-gpu-pro&num=1

\n\n
\n

起初我尝试使用 Ubuntu 16.04 日常系统及其打包的 Xenial 内核。然而,即使这个打包的 AMDGPU 二进制驱动程序使用 DKMS,该内核驱动程序代码与 Linux 4.4 的兼容性仍然存在问题。由于Linux 4.4的DRM内核接口发生一些变化,构建DKMS模块失败。正如 Bridgman 在论坛中指出的那样,AMD 应该会尽快修复此问题,但目前,简单的修复方法只需在 Ubuntu 16.04 机器上安装 Linux 4.2

\n
\n\n

我没有尝试简单的解决方案,但我在当天早些时候发现了困难的解决方案,它对我来说没有任何问题。

\n\n
\n

但是,如果您尝试此操作,我建议您在尝试此操作之前备份您的系统。

\n
\n\n

Ubuntu GNOME 上的 AMDGPU-PRO 的问题是 COGL 无法正确编译。

\n\n

有一个补丁文件:

\n\n

由 Ashley Sommer 修复 AMDGPU-PRO 驱动程序的 COGL。\n https://gist.github.com/ashleysommer/25118d366bf8c1608f3b1a64bc52d4e5

\n\n
    --- a/cogl/driver/gl/gl/cogl-driver-gl.c\n    +++ b/cogl/driver/gl/gl/cogl-driver-gl.c\n    @@ -403,9 +403,13 @@\n                                   &ctx->glsl_minor);\n         }\n\n    -  if (COGL_CHECK_GL_VERSION (ctx->glsl_major, ctx->glsl_minor, 1, 2))\n    -    /* We want to use version 120 if it is available so that the\n    -     * gl_PointCoord can be used. */\n    +  if (COGL_CHECK_GL_VERSION (ctx->glsl_major, ctx->glsl_minor, 1, 5))\n    +    ctx->glsl_version_to_use = 150;\n    +  else if (COGL_CHECK_GL_VERSION (ctx->glsl_major, ctx->glsl_minor, 1, 4))\n    +    ctx->glsl_version_to_use = 140; \n    +  else if (COGL_CHECK_GL_VERSION (ctx->glsl_major, ctx->glsl_minor, 1, 3))\n    +    ctx->glsl_version_to_use = 130; \n    +  else if (COGL_CHECK_GL_VERSION (ctx->glsl_major, ctx->glsl_minor, 1, 2))\n         ctx->glsl_version_to_use = 120;\n       else\n         ctx->glsl_version_to_use = 110;\n
Run Code Online (Sandbox Code Playgroud)\n\n

用户illwieckz提供了有关如何应用修复程序的指南:

\n\n

https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/amd-linux/881527-amdgpu-pro-16-30-released-with-rx-480-support/page5

\n\n

要做的事情:

\n\n
\n

您必须重建libcogl20软件包。由于我无法成功重建cogl软件包,因此我只是替换了libcogl.so二进制文件本身。

\n
\n\n
 sudo apt-get build-dep cogl\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果你得到:E: Unable to find a source package for cogl

\n\n
 sudo gedit /etc/apt/sources.list\n
Run Code Online (Sandbox Code Playgroud)\n\n

并将其添加到文件末尾:

\n\n
 # COGL\n deb-src ftp://ftp.de.debian.org/debian/ stable main contrib\n
Run Code Online (Sandbox Code Playgroud)\n\n

下一个:

\n\n
 sudo apt-get update &&  sudo apt-get build-dep cogl\n
Run Code Online (Sandbox Code Playgroud)\n\n

安装构建所需的几个软件包cogl

\n\n
 sudo apt-get install devscripts libcogl-gst-dev\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后继续:

\n\n
\n\n
 The following commands I executed from the home directory,\n because of permission errors and `command is not found`\n errors I was getting.\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
 apt-get source cogl\n cd cogl-1.22.0\n wget -O /tmp/cogl.patch https://gist.githubusercontent.com/ashleysommer/25118d366bf8c1608f3b1a64bc52d4e5/raw/e35e535e7ea9684538a63fe6ea0eb2709b1813f1/cogl_driver_gl_gl_cogl-driver-gl.c\n patch -p1 < /tmp/cogl.patch\n dpkg-source --commit\n debuild -us -uc -j$(nproc)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

如果构建成功结束,您只需使用或安装生成的libcogl20deb 文件(在父目录中):gdebidpkg

\n
\n\n
 sudo dpkg -i libcogl20_1.22.0-2_amd64.deb\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果它对你来说失败了,就像对我来说失败了一样,那么还有另一个选择,你可以像我一样做。

\n\n

因为就我而言,构建在一些不必要的部分失败了,但是修补后的库构建得很好,我只是手动替换了二进制文件:

\n\n

代码:

\n\n
 sudo cp -a debian/tmp/usr/lib/x86_64-linux-gnu/libcogl.so.20.4.1 /usr/lib/x86_64-linux-gnu/libcogl.so.20.4.1\n
Run Code Online (Sandbox Code Playgroud)\n\n

桌面冻结了几秒钟。

\n\n
\n

由于我覆盖了来自某个包的文件,因此我将该包标记为 \xe2\x80\x9chold\xe2\x80\x9d 以确保将来的更新不会覆盖它,最好保留它如果您成功构建了软件包,出于同样的原因。

\n
\n\n

代码:

\n\n

sudo apt-mark hold libcogl20

\n\n
\n

如果你想恢复脏东西,你只需要做:

\n
\n\n

代码:

\n\n
 sudo apt-mark unhold libcogl20\n sudo apt-get install --reinstall libcogl20\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

专业提示,您可以使用 debsums 工具(来自 debsums 软件包)来检查您是否正在从软件包运行 libcogl.so 或像我一样快速而肮脏的修补程序:

\n
\n\n

代码:

\n\n
 debsums -s libcogl20\n debsums: changed file /usr/lib/x86_64-linux-gnu/libcogl.so.20.4.1 (from libcogl20:amd64 package)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

如果您成功构建了软件包并以 dpkg 方式安装了它,debsums 不会抱怨。

\n
\n\n

amdgpu-pro 安装的最后一部分如下所示

\n\n
\n\n
Setting up amdgpu-pro (16.30.3-315407) ...\n\nSetting up amdgpu-pro-dkms (16.30.3-315407) ...\n\nLoading new amdgpu-pro-16.30.3-315407 DKMS files...\n\nFirst Installation: checking all kernels...\n\nBuilding for 4.4.0-36-generic and 4.8.0-rc5\n\nBuilding for architecture x86_64\n\nBuilding initial module for 4.4.0-36-generic\n\nDone.\n\n\namdgpu:\n\nRunning module version sanity check.\n\n- Original module\n\n- Installation\n\n- Installing to /lib/modules/4.4.0-36-generic/updates/dkms/\n\n\ndepmod....\n\n\nDKMS: install completed.\n\nBuilding initial module for 4.8.0-rc5\n\nERROR: Cannot create report: [Errno 17] File exists:\n \'/var/crash/amdgpu-pro-dkms.0.crash\'\n\nError! Bad return status for module build on kernel: 4.8.0-rc5 (x86_64)\nConsult /var/lib/dkms/amdgpu-pro/16.30.3-315407/build/make.log for more information.\n\nupdate-initramfs: deferring update (trigger activated)\n\nSetting up amdgpu-pro-lib32:i386 (16.30.3-315407) ...\n\nProcessing triggers for libc-bin (2.23-0ubuntu3) ...\n\nProcessing triggers for initramfs-tools (0.122ubuntu8.1) ...\n\nupdate-initramfs: Generating /boot/initrd.img-4.8.0-rc5\n\nWarning: Not updating LILO; /etc/lilo.conf not found!\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

2016 年 10 月 9 日更新:\n 使用 RX 480。

\n\n

在此输入图像描述

\n\n

内核安装成功 4.4.0-36-generic

\n\n

但内核模块构建4.8.0-rc5失败。

\n\n

确保您有:sudo apt-mark hold libcogl20

\n\n

此命令可防止用较新的版本gnome package updater替换已编译的版本libgogl20

\n\n

它还会阻止安装其他软件包,因为某些软件包依赖于更新版本cogl等。

\n\n

我们只需要等待官方修复此问题,在此之前这是让驱动程序amdgpu-pro正常工作的好方法Ubuntu Gnome 16.04

\n