LINUX.ORG.RU

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

 , ,


10

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.

★★★★★

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

Столько телодвижений и это только чтобы получить рабочий видеодрайвер на радеоне :)

Невидийный проще накатывать

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

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

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

Конкретно мне все эти навороты с OpenCL не нужны, я не майню, хеши паролей не считаю. Поэтому просто firmware-amd-graphichs поставил и xserver-xorg-video-amdgpu. И то не знаю зачем.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У дебиана просто с помощью 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)
Ответ на: комментарий от Deleted

Свалится с ошибкой, если читать их форум.

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

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

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

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

свежий адреналин только 64 бита на всех платформах, у старого есть 32 бита под все дистрибутивы. просто 32х битные системы всё.

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

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

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

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

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

А то вот у меня Sandy Bridge и PCI 3.0

а ничего что 3.0 появился только в ivy bridge, а в сэндиках классический 2.0? :)

NiTr0 ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
() автор топика
Ответ на: комментарий от praseodim

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

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

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

Thero ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.