LINUX.ORG.RU

Написал небольшое howto по установке драйверов AMD Radeon RX580 в Debian 9

 , , ,


9

4

Интересны комментарии, особенно владельцев карты, но и в любом случае, может где ошибся или что.

Рассматривается установка свободных драйверов OpenGL и проприетарных OpenCL на ветку stable ОС Debian 9.6 (Stretch) с ядром 4.9.0-8. Проприетарных OpenCL, поскольку карта ставится в машину с процессором старее Haswell/Ryzen, которые не поддерживаются ROCm.

Информация также должна годиться для RX570 и RX470, RX480. И скорее всего, для всех остальных RX 4xx, RX 5xx, кроме RX 590 (но может и с ней сразу заработает) - эта карточка стоит несколько особняком. В конце есть пара теоретических (самой карты нет и не пробовал) соображений, что может понадобиться, чтобы она заработала.

Сразу скажу, что информации на официальной вики проекта слишком мало https://wiki.debian.org/GraphicsCard#AMD.2FATI

В терминологии AMD у этой карты архитектура «polaris», она же «Arctic Islands» она же GCN 4th gen (4-е поколение Graphics Core Next). К ней относятся карты RX 460, RX 470, RX 480, RX 540, RX 550, RX 560, RX 570, RX 580

Микроархитектура карт (RX 470, RX 480) == (RX 570, RX580) практически до неразличимости на программно-драйверном уровне. Довольно много подробностей на эту тему можно прочесть здесь: https://wiki.gentoo.org/wiki/AMDGPU. Версия фирмвари от AMD - polaris10 для amd 480 и amd 580 (могут быть разные буквенные индексы у фирмвари).

Так как до этого на компьютере стояли карты от Nvidia надо избавиться от их драйверов. Рекомендации wiki Debian может оказаться недостаточно.

Но по порядку. Все делаем от root, разумеется.

Установка свободного драйвера OpenGL:

  1. Добавляем contrib и non-free в репозиторий (/etc/apt/sources.list), если еще этого не сделано.
  2. Добавляем dpkg --add-architecture i386
    В принципе необязательно, но весьма желательно для некоторых пакетов. В том числе для wine
  3. apt-get update
  4. apt-get install xserver-xorg-video-amdgpu libdrm-amdgpu1 libgl1-mesa-dri libgl1-mesa-glx glx-alternative-mesa
  5. apt-get install -t sid firmware-amd-graphics
    -t sid опционален. (но сам пакет ставить нужно) У меня RX580 и с фирмварью из stable работает, но возможно кому-то.нужны более новые бинарники к карте. Впрочем, вполне можно не подключать testing и sid ветки репозиториев, если отдельно скачать пакет от sid и содержимое /lib/firmware/amdgpu добавить вручную. Также фирмварь появится и при установке проприетарных драйверов, даже только OpenCL.
  6. Проверяем, что модуля nvidia нет в списке /etc/initramfs-tools/modules
    Если он там есть удаляем или коментим #
  7. Редактируем /etc/modprobe.d/nvidia.conf комментируем все записи. Добавляем строчку blacklist nvidia
  8. Выполняем update-glx --config glx
    Выбираем среди альтернатив (скорее всего от nvidia, если была карта nvidia) mesa
  9. Reboot

Должно заработать, если не заработало, то я даже не знаю. Надо будет внимательно читать лог /var/log/Xorg.1.log и смотреть, что там делает строчка nvidia =)

glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: X.Org (0x1002)
    Device: AMD POLARIS10 (DRM 3.20.0 / 4.9.0-8-amd64, LLVM 3.9.1) (0x67df)
    Version: 13.0.6
    Accelerated: yes
    Video memory: 8171MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 4.3
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.1
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD POLARIS10 (DRM 3.20.0 / 4.9.0-8-amd64, LLVM 3.9.1)
OpenGL core profile version string: 4.3 (Core Profile) Mesa 13.0.6
OpenGL core profile shading language version string: 4.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 3.0 Mesa 13.0.6
OpenGL shading language version string: 1.30
OpenGL context flags: (none)

OpenGL ES profile version string: OpenGL ES 3.1 Mesa 13.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10

Добавляем apt-get install mesa-vdpau-drivers libvdpau-va-gl1 для ускорения фильмов.

Вот не помню, нужно ли было для свободного драйвера ставить заголовки ядра или только для проприетарного, а также llvm. Но не исключено, что потребуется.

Добавление возможностей OpenCL

  1. Берем пакет 17.50 для Ubuntu. Официально драйвера рассчитаны на Ubuntu, SuSe или RHEL c CentOS, так как Ubuntu весьма родственна Debian, она наиболее совместимая. При этом 18-я версия для Stretch (Debian 9) не подойдет. 17.50 вроде последняя среди 17-ой версии. Версия 17.50 почему-то не находится явно по ссылкам для для предыдущих версий на сайте amd
    Поэтому скачиваем по прямой ссылке, не забудьте referer - без него не даст скачать.
    wget -c -O amdgpu-pro-17.50-511655.tar.xz --referer=http://support.amd.com https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-17.50-511655.tar.xz

    Проверяем по контрольной сумме корректность скачивания (есть сообщения, что часто отдается битый файл, тогда надо повторять до успеха).
    md5sum 
         7c3da10af92f6e259bd5d2b250a70c91  amdgpu-pro-17.50-511655.tar.xz
    sha256sum
         a623f95b7bdbad981e19bd30304f7943f8827d230b702dc5b580793efe70ea07  amdgpu-pro-17.50-511655.tar.xz
    
  2. Создаем каталог
    #mkdir /var/opt/amdgpu-pro-local/
  3. Распаковываем туда содержимое скаченных драйверов tar -xpJf amdgpu-pro-17.50-511655.tar.xz --strip=1 -C /var/opt/amdgpu-pro-local/
    Обратите внимание на опцию --strip=1 - она убирает первый уровень вложенности каталогов, без нее внутри был бы создан вложенный каталог с пакетами, а этого нам не надо.
  4. Устанавливаем нужные права владельца:
    chown -Rv _apt:root /var/opt/amdgpu-pro-local/
    Важно. Без этого потом установка будет валиться с ошибкой типа
    N: Download is performed unsandboxed as root as file '/var/opt/amdgpu-pro-local/./amdgpu-core_17.50-511655_all.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
    - причем в том числе и если запустить установочный скрипт внутри пакета с драйверами, даже если там поменять ubuntu на debian. Вот все вроде будет нормально, но зафейлится в процессе установки на правах для установщика пакета.
  5. Создаем файл /etc/apt/sources.list.d/amdgpu-pro-local.list
    echo 'deb [ trusted=yes ] file:/var/opt/amdgpu-pro-local/ ./' > /etc/apt/sources.list.d/amdgpu-pro-local.list
  6. apt-get update
  7. apt-get install amdgpu-core amdgpu-dkms amdgpu-pro-core clinfo-amdgpu-pro ids-amdgpu libdrm-amdgpu-amdgpu1 libdrm2-amdgpu libopencl1-amdgpu-pro
    Внимательно следим за процессом установки, компиляция чере dkms драйвера и его установка должны быть безошибочными. Это ключевой момент, без чего работать ничего не будет. Разумеется должны быть установлены заголовки ядра linux-headers-4.9.0-8-common и компиляторы со всем необходимым. dkms вроде сам добавится через зависимости, если еще не стоит.
  8. Опционально. Можно переустановить пакет или скопировать из других драйверов содержимое с более свежим firmware для amd, так как amdgpu-dkms содержит каталог firmware которым перепишет старые бинарники.
  9. reboot

Теперь OpenCL версии 1.2 доступно. Можно для проверки запустить clinfo или поставить какой-нибудь пакет, его использующий, например, hashcat и запустить бенчмарк hashcat -b

Некоторые мысли по поводу RX 590. Я не знаю, может этого и не нужно или наоборот этого не хватит для работы, просто предполагаю.

В принципе, RX 590 почти тоже самое, что и RX580, но могут быть нужны новые фирмвари, которые можно взять из новейших драйверов 18.50, распотрошив файл amdgpu-dkms_18.50-708488_all.deb и достав их из каталога usr/src/amdgpu-18.50-708488/firmware/amdgpu скопировав затем в /lib/firmware/amdgpu

Также в пакете ids-amdgpu от 17.50 есть файл amdgpu.ids установленный в /opt/amdgpu/share/libdrm/amdgpu.ids - его полезно будет заменить таким же из пакета libdrm-amdgpu-common_1.0.0-708488_all.deb

Чего я не понял, это почему для OpenCL пишется что-то вроде Memory : 4048/7916 MB allocatable

Куда 4Гб памяти дели? Или так и должно быть, там какое-то разделение есть на основную и константную, может просто не понял чего насчет работы OpenCL.

Некоторая особенность: у меня поломался virtualbox после установки свободных драйверов OpenGL. Для восстановления понадобилось переустановить dkms и сделать /sbin/vboxconfig

praseodim ★★★★ ()

лень читать, но чего так все сложна? Там же вроде все интуитивно понятно было...

Добавляешь локальный репозиторий и запускаешь скрипт установки с ключом --opencl и он сам все нужные пакеты установит.

Чего я не понял, это почему для OpenCL пишется что-то вроде Memory : 4048/7916 MB allocatable

Вроде ничего страшного не означает. У меня как-то так на всех, брат жив.

Radius ★★★★ ()
Ответ на: комментарий от RedEyedMan4

Тут палка о двух концах. Если система ставится с нуля, а не после nvidia, то рабочий OpenGL драйвер вообще получится из коробки. И в любом случае, в дальнейшем не будет слетать при разных апдейтах и перекомпиляциях ядра. С OpenCL посложнее, да.

praseodim ★★★★ ()
Ответ на: комментарий от Radius

Там же вроде все интуитивно понятно было...

Смотря для кого что интуитивно. Для меня например, совсем не интуитивно было, что надо выбирать 17-ю версию драйверов, а не 18-ю.

Добавляешь локальный репозиторий и запускаешь скрипт установки с ключом --opencl и он сам все нужные пакеты установит.

На ubuntu, на debian его еще и патчить надо, чтобы отучить проверять систему. Кроме того, этот скрипт сам создает локальный репозиторий, вот только без изменения прав на файлы, при установке будет ошибка, которую я привел выше couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от darkenshvein

Что значит из коробки в данном случае? Если систему с нуля ставить, то открытые драйвера OpenGL сами поставятся.

Я же рассматриваю случай добавления туда, где раньше стояла плата от nvidia.

Для проприетарных драйверов в любом случае нет официальной версии для дебиана.

praseodim ★★★★ ()
Ответ на: комментарий от LittleKawaiiNeko

Мне не очень понятно, почему AMD не осилила запилить универсальный бандл граф. драйвера (такой как у NVIDIA) и залочила поддержку на бинарники под убунты и рхель.

Кстати, знакомый (сотрудник AMD) тоже не в курсе :)

В итоге, амдшную проприетарь натянуть на генту не получится, но это уже не моя проблема, т.к. я взял 1050Ti и верчу Blender с CUDA.

RedEyedMan4 ★★★★★ ()
Ответ на: комментарий от RedEyedMan4

Мне не очень понятно, почему AMD не осилила запилить универсальный бандл граф. драйвера (такой как у NVIDIA) и залочила поддержку на бинарники под убунты и рхель.

Думаю, что просто из некоторого пофигизма, который чувствуется в этой компании.

В итоге, амдшную проприетарь натянуть на генту не получится,

Должно получиться, если ее основательно расковырять. Можно распаковать убунтушные (или редхатовские) пакеты и вручную поставить нужные либы. Ну и конечно со сборкой модуля ядра придется задрочиться.

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 2)
Ответ на: комментарий от RedEyedMan4

Еще можно спросить почему нет драйверов для 32-битных версий винды. Интересно, что линукса 32-битные варианты имеются, так что вряд ли проблема в какой-то заточенности под 64-битный проц.

praseodim ★★★★ ()
Ответ на: комментарий от praseodim

Должно получиться, если ее основательно расковырять.

Гентушники уже расковыряли OpenCL в отдельный пакет, но ебилд порядком устаревает (поддерживается так себе), да еще и без симлинка ничего не работало, т.к. это всё хаки и экспериментальщина. Дебиану свежей ветки в этом плане больше повезло, наверное (бинарники возможно ближе по версии).

RedEyedMan4 ★★★★★ ()
Последнее исправление: RedEyedMan4 (всего исправлений: 1)
Ответ на: комментарий от RedEyedMan4

Дебиану свежей ветки в этом плане больше повезло, наверное (бинарники возможно ближе по версии).

У дебиана просто с помощью dkms есть автоматическая пересборка. Должно работать в некоторых пределах. Впрочем, в генту наверное тоже.

Вообще, в принципе, свободный ROCm может это все сделать в итоге не нужным. Если бы не такая особенность, что не на всех процессорах заработает.

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от BceM_IIpuBeT

Официально нужно и PCI-E 3.0 и процессор не ниже Haswell. Впрочем, haswell и Ryzen не на 3.0 не бывает, так что требования все же к процессору.

А то вот у меня Sandy Bridge и PCI 3.0 - думаешь стоит попробовать ROCm?

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 2)
Ответ на: комментарий от RedEyedMan4

там давно всё на ебилды разложили уже..

а залочено по наследству. на ранней стадии развития драйвера было принято решение официально поддерживать ограниченный пул дистрибутивов постепенно его расширяя.. расширение пула увы не в приоритете.

Thero ★★★★★ ()
Ответ на: комментарий от praseodim

Ну стояла и стояла. С другой ведеокартой убеждался, что есть vesa, сносил драйвер нвидиа, менял карту, загружался, ставил драйвер радеон.

Вот что для новых видеокарт есть проблемы с ядром 4.9 вполне ожидаемо. И то, что в дебиане для установки драйвера видеокарты нужно ставить кучу пакетов по приведённому списку, действительно раздражает. Поэтому и свалил обратно на генту в итоге, перекантовавшись чуть на минт.

grem ★★★★★ ()
Ответ на: комментарий от grem

С другой ведеокартой убеждался, что есть vesa, сносил драйвер нвидиа, менял карту, загружался, ставил драйвер радеон.

На этом этапе юзера ждут не загружающиеся иксы. Или как в моем случае даже интереснее: иксы вообще говоря стартуют, но cinnamon сразу падает с сообщением «Oops» и кнопкой, которая его перезагружает только, чтобы сразу упал. Из-за glx-либы от nvidia, понадобилось update-glx --config glx сделать, чтобы выбрать mesa

Причем, в принципе, есть способ настроить работу сразу с двумя картами: nvidia и amd. Или попеременно, с переключением. Или с запуском двух икс-серверов в своем окружении и выводом на разные мониторы. Но я эту фигуру высшего пилотажа пока что не осиливаю.

Понятно, что для опытных людей это все вообще не проблема ни разу. Мне же захотелось сделать подробный howto для тех, у кого это могло вызвать проблемы. К сожалению, я не все действия при этом документировал (в отличие от установки OpenCL) и о чем-то уже и забыл.

И то, что в дебиане для установки драйвера видеокарты нужно ставить кучу пакетов по приведённому списку, действительно раздражает.

Я вот думаю, что может слишком много слов понаписал, потому что в сущности там всего пять пакетов надо указать в apt-get install, причем пару из них я фактически добавил для перестраховки.

Установка свежих бинарников фирмвари это тоже для перестраховки, у меня нормально заработало и без них. Хотя с ними производительность пожалуй что выросла, но не сильно, где-то на 2-3% судя по тестам.

Вот если надо еще и OpenCL подключить, предстоит немного больше возни. Из самого неочевидного - это что надо было ставить 17.50 (по идее 17.40 тоже должна поставиться), а не 18-я версия.

Для 18-й, наверное, надо обновить ядро в дистрибутиве не знаю уже до какой версии. Не пробовал. Но кроме проблем со сборкой модуля с ядром 4.9 в 18-й версии еще и почему-то --headless фактически не работает. Возможно кроме ядра там еще надо обновить много чего. Сейчас в дебиане, кстати, странная инверсия: почему-то в testing более новое ядро, чем в sid. (4.19 вместо 4.15). Наверное, в 4.15 есть какие-то баги, которых нет в 4.19.

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 6)
Ответ на: комментарий от Thero

просто 32х битные системы всё.

Я бы так не сказал, есть задачи, где 32-битные использовать желательно. Правда, это в основном какой-нибудь старый софт, особенно если 16-ти битные еще (в 64-битной системе по определению работать не будет). В режиме PAE даже будет задействована вся память.

Можно конечно рассуждать, что карта класса RX 580 и 32-битные системы плохо сочетаются. Но вот nvidia к примеру все же предоставляет драйвера и для 32-битных в том числе.

praseodim ★★★★ ()
Ответ на: комментарий от Pravorskyi

С RX590 я мельком заметил, что могут быть, несмотря на то, что это фактически оверклокнутый RX580. Сообщи какой опыт с гентой будет, итересно.

Вообще, если железо достаточно новое, позволяет блок питания и размер корпуса и жаба не давит, лучше брать Vega 56. Если совсем жаба не давит, то Vega 64.

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 2)

apt-get install -t sid firmware-amd-graphics
-t sid нужно для получения новейших бинарников фирмвари к карте, которых может не быть в debian stable

Скажите, вот это чем-то обосновано или просто на всякий случай?

Просто насколько я понял приключения во всех дистрибутивах на ядре 4.19.9 с картами polaris пошли после двух коммитов:

  • drm/amdgpu/gmc8: always load MC firmware in the driver и
  • drm/amdgpu/gmc8: update MC firmware for polaris

https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.19.9

Вот после этих изменений в ядре и стали нужны правильные firmware. А до момента этого раз уж «always load MC firmware», то и зачем ядру новые?

Или я что-то неправильно понимаю?

Toxo1 ()
Ответ на: комментарий от Toxo1

Скажите, вот это чем-то обосновано или просто на всякий случай?

Фактически на всякий случай. В testing и stable-ветке версии бинарников еще от 2016-го года, хотя карты RX 500-й серии появились в 2017-м году. Но по идее должно заработать и так, потому что 400-я серия тогда уже была, а отличия там почти что только в названии. В системе RX 580 определяется как RX 470/480 и только в amd-ном драйвере есть название 580

Вот после этих изменений в ядре и стали нужны правильные firmware. А до момента этого раз уж «always load MC firmware», то и зачем ядру новые?

Еще не проверял с ядром 4.19 так что ничего определенного не скажу. Просто мысль была, что если можно поставить последние версии, то почему бы так и не поступить - это в общем-то не сложно, дебиановский пакет можно даже не устанавливать, а просто выдрать и скопировать откуда-нибудь, хоть даже из самых новейших драйверов 18.50.

praseodim ★★★★ ()
Последнее исправление: praseodim (всего исправлений: 3)
Ответ на: комментарий от NiTr0

Это смотря в каких сэндиках

#lspci -vv | grep -E 'PCI bridge|LnkCap'
LnkCap:	Port #0, Speed 2.5GT/s, Width x4, ASPM L0s L1, Exit Latency L0s <512ns, L1 <16us
00:01.0 PCI bridge: Intel Corporation Xeon E5/Core i7 IIO PCI Express Root Port 1a (rev 07) (prog-if 00 [Normal decode])
		LnkCap:	Port #0, Speed 8GT/s, Width x8, ASPM not supported, Exit Latency L0s unlimited, L1 <16us
00:02.0 PCI bridge: Intel Corporation Xeon E5/Core i7 IIO PCI Express Root Port 2a (rev 07) (prog-if 00 [Normal decode])
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM not supported, Exit Latency L0s unlimited, L1 <16us
00:03.0 PCI bridge: Intel Corporation Xeon E5/Core i7 IIO PCI Express Root Port 3a in PCI Express Mode (rev 07) (prog-if 00 [Normal decode])

Speed 8GT/s - это типичная 3.0

praseodim ★★★★ ()
Ответ на: комментарий от einhander

Что именно заработало?

Для сабжевой видеокарты, по крайней мере в моем случае, не требовалось ни нового ядра, ни новой mesa, достаточно было стабильных. Единственное, я насчет фирмвари не уверен. Но ее можно и отдельно установить.

praseodim ★★★★ ()
Ответ на: комментарий от einhander

Специально посмотрел, когда она вышла, но тоже в апреле 2017, как и rx 580. Так что, чисто теоретически ни нового ядра, ни новой mesa ей не нужны и архитектура та же. То есть, должна была заработать и с stable, как и у меня. Хотя х.з, что там в mesa понакрутили или недонакрутили.

praseodim ★★★★ ()
Ответ на: комментарий от praseodim

у нвидии абсолютно также 32 бита отпадёт к концу этого\следующего года. будут выпускать легаси раз в пару кварталов какое-то время и всё.

из того что конфузит в амдшной предлагалке драйверов она теперь не позволяет сразу сказать вот у меня 32хбитная система и такая вот карта какой под неё последний драйвер?

ребята явно в каком-то творческом поиске потому что интерфейс поиска драйверов за последний год постепенно меняется то в хорошую то в плохую сторону и неяссно есть ли у них критерии того что этот интерфейс должен конечному пользователю дать.

Thero ★★★★★ ()

Куда 4Гб памяти дели? Или так и должно быть, там какое-то разделение есть на основную и константную, может просто не понял чего насчет работы OpenCL.

вот эти пробуй

export GPU_FORCE_64BIT_PTR=1 
export GPU_USE_SYNC_OBJECTS=1
export GPU_SINGLE_ALLOC_PERCENT=100
export GPU_MAX_HEAP_SIZE=100
export GPU_MAX_ALLOC_PERCENT=100
Radius ★★★★ ()

Привет, praseodim. Отличная инструкция! А можешь пожалуйста извлечь блоб AtomBIOS своей RX580 или Retrieval via Linux kernel способом или если зафейлится то через Extraction from mapped memory, и выложить его куда-нибудь? Хочется посмотреть насколько хорошо его AtomDis дизассеблировать сможет

SakuraKun ★★ ()