这是在安装了R9 390X并试用各种内核的Ubuntu 18.04.1 上启用 amdgpu(而不是radeon)的指南和测试摘要。
阅读完这篇文章并阅读/观看Level1Techs 指南和许多其他内容后,我终于设法加载了 amdgpu 而不是 radeon。以下步骤显示了如何实现这一点。
问题
我想使用开源驱动程序(不是 amdgpu-pro)通过 DXVK 在 Linux 上玩游戏。由于 DXVK 仅适用于 amdgpu 驱动程序,因此我不得不一直摆脱 Ubuntu 加载 radeon。
我的设置
Ubuntu 18.04.1 LTS
i7-5830k
R9 390X(实际上是2个,但应该没有关系)
@未测试:它还应该与 Ubuntu 18.04.1 安装附带的官方驱动程序一起使用。如果您不想运行非官方驱动程序,请跳过此步骤。
@注意:从 PPA 下载更新的非官方驱动程序以获得更好的 DXVK 性能。可能不稳定。
从https://launchpad.net/~oibaf/+archive/ubuntu/graphics-drivers安装最新的驱动程序:
sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt update && sudo apt dist-upgrade
sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386
Run Code Online (Sandbox Code Playgroud)
@ERROR未满足的依赖项:首先安装原始驱动程序:
sudo add-apt-repository --remove ppa:oibaf/graphics-drivers
sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386
Run Code Online (Sandbox Code Playgroud)
@注意:确保您没有添加像ppa:paulo-miguel-dias/mesa这样的其他图形驱动程序 PPA 。您可以检查他的 Mesa 驱动程序:稳定或不稳定
@ERROR由于 PPA 引起的一般错误: 清除图形驱动程序 PPA 以回退到原始驱动程序并进行清理:
sudo apt install ppa-purge && aptitude
sudo ppa-purge ppa:oibaf/graphics-drivers
sudo apt autoremove && sudo apt autoclean
Run Code Online (Sandbox Code Playgroud)
你可以重新开始。
创建一个将在启动时自动加载的 xorg 配置文件:
/usr/share/X11/xorg.conf.d/<nr-name>.conf 例如 42-amdgpu.conf
#/usr/share/X11/xorg.conf.d/42-amdgpu.conf
Section "Device"
Identifier "AMDGPU"
Driver "amdgpu"
Option "AccelMethod" "glamor"
Option "DRI" "3"
EndSection
Run Code Online (Sandbox Code Playgroud)
@未测试:将此添加到现有10-amdgpu.conf文件中。可能会被驱动程序安装覆盖。
@OPTION:您也可以将此添加到/etc/X11/xorg.conf或/etc/xorg.conf。
使用应列入黑名单的模块创建黑名单文件:
/etc/modprobe.d/<name>.conf 例如 blacklist-radeon.conf
#/etc/modprobe.d/blacklist-radeon.conf
blacklist radeon
Run Code Online (Sandbox Code Playgroud)
@OPTION:可以blacklist.conf通过附加blacklist radeon到某处来使用已经存在的文件。
在 grub 配置中添加或更改这些参数/etc/default/grub:
#/etc/default/grub
...
GRUB_GFXMODE=1920x1080x32
GRUB_CMDLINE_LINUX_DEFAULT="radeon.si_support=0 radeon.cik_support=0 amdgpu.si_support=1 amdgpu.cik_support=1 amdgpu.dc=1 amdgpu.dpm=1 amdgpu.modeset=1"
...
Run Code Online (Sandbox Code Playgroud)
@DID-NOT-WORK:我40_custom在/etc/grub.d/. 当我把它放在40_amdgpu而不是/etc/default/grub. (查看/etc/grub.d/README更多信息)
让上述更改生效:
sudo update-grub2 && sudo update-initramfs -u -k all
Run Code Online (Sandbox Code Playgroud)
和
reboot
Run Code Online (Sandbox Code Playgroud)
要验证 amdgpu 驱动程序是否已加载并正在使用,请执行以下一项或多项命令:
lsmod | egrep 'Used|amdgpu'
sudo lspci -v | grep amdgpu -B 19
sudo lshw -c video | grep amdgpu -B 10 -A 1
Run Code Online (Sandbox Code Playgroud)
运行 Vulkan 测试应用程序:
sudo apt install vulkan-utils
Run Code Online (Sandbox Code Playgroud)
和
vulkan-smoketest
Run Code Online (Sandbox Code Playgroud)
在上述步骤之后,我尝试启动各种内核。
要安装其他内核,我使用了Ubuntu 内核更新实用程序:
sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt update
sudo apt install ukuu
Run Code Online (Sandbox Code Playgroud)
以下是我的测试总结:
4.15.0 WORKING! Ubuntu 18.04.1 LTS 默认内核
4.17.5 WORKING!本视频中使用的内核
4.18.0 WORKAROUND! Ubuntu 19.10 Disco 当前默认内核 (2018-11-19)
4.18.15 WORKAROUND! 对 amdgpu 进行更改的最新 4.18.x 内核
4.18.19 WORKAROUND! 最新的 4.18.x 内核
4.19 FAILURE! 黑屏或 dmesg:
[drm:dm_pp_get_static_clocks [amdgpu]] *ERROR* DM_PPLIB: invalid powerlevel state: 0!
Run Code Online (Sandbox Code Playgroud)
4.19.1 FAILURE! 黑屏或 dmesg:
drm:dm_pp_get_static_clocks [amdgpu]] *ERROR* DM_PPLIB: invalid powerlevel state: 0!
drm:amdgpu_vce_ring_test_ring [amdgpu]] *ERROR* amdgpu: ring 12 test failed
drm:amdgpu_device_init.cold.28 [amdgpu]] *ERROR* hw_init of IP block <vce_v2_0> failed -110
amdgpu 0000:05:00.0: amdgpu_device_ip_init failed
amdgpu 0000:05:00.0: Fatal error during GPU init
Run Code Online (Sandbox Code Playgroud)
4.19.2 FAILURE! 留言:
Direct firmware load for amdgpu/hawaii_mc.bin failed with error -2
@NOTE:我还没有对4.19.x内核错误进行更多调查。
4.18-4.18.19
要使4.18内核工作:
备份您当前的固件文件:
sudo cp -r /lib/firmware /lib/firmware-$(uname -r)
Run Code Online (Sandbox Code Playgroud)从https://packages.ubuntu.com/en/disco/linux-firmware下载 Ubuntu 19.10 Disco(当前 Disco 版本默认使用内核 4.18.0)的 linux-firmware或:
wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux-firmware/linux-firmware_1.176.tar.gz
Run Code Online (Sandbox Code Playgroud)提取文件:
tar -xvzf linux-firmware_1.76.tar.gz
Run Code Online (Sandbox Code Playgroud)进入新的固件目录:
cd linux-firmware
Run Code Online (Sandbox Code Playgroud)安装固件:
sudo make install
Run Code Online (Sandbox Code Playgroud)重启
reboot
Run Code Online (Sandbox Code Playgroud)下面是我的测试总结:
4.18.16 WORKING! Mint 19.1 带有所有提到的内核参数并且 Radeon 被列入黑名单
4.18.17 - 4.18.20 BLACKSCREEN! 固件更新没有解决问题
4.18.17 - 4.18.20 NOT TESTED! 省略 dpm 内核参数
4.20.12 WORKING! 省略了 dpm 内核参数
5.00.00 WORKING! 省略了 dpm 内核参数
5.2.21 RECOMMENDED! WORKING! amdgpu.dpm=1 已修复且有效
warning: many gpus have a maximum temperature of 95°C / 203°F
exceeding that can damage your gpu, look at your config twice!
Run Code Online (Sandbox Code Playgroud)
使用文件名编写服务:amdgpu-fancontrol.service
[Unit]
Description=amdgpu-fancontrol
[Service]
Type=simple
ExecStart=/usr/bin/amdgpu-fancontrol
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)将服务放入
/etc/systemd/system
Run Code Online (Sandbox Code Playgroud)从 github 获取脚本:链接
如果你想改变脚本的参数
4.1. 如果您还有集成图形,请将所有数字从零更改为一。
/sys/class/drm/card1/device/hwmon/hwmon1/
Run Code Online (Sandbox Code Playgroud)
4.2. 更改温度/转数映射。风扇速度的变化确实会干扰渲染。因此,这些值应该保持不变,以便在两者之间不发生插值。最后一个值将被选为过热保护的最大风扇速度。
TEMPS=( 60000 65000 80000 95000 96000 )
PWMS=( 170 170 170 170 255 )
Run Code Online (Sandbox Code Playgroud)
4.3 检查目录是否存在
将脚本放入 /usr/bin/amdgpu-fancontrol
激活服务
sudo systemctl daemon-reload
sudo systemctl enable amdgpu-fancontrol.service
sudo systemctl start amdgpu-fancontrol.service
Run Code Online (Sandbox Code Playgroud)