среда, 14 декабря 2016 г.

Включение поддержки видеокарт AMD Radeon архитектур GCN 1.0 и 1.1 в ядре Linux для драйвера AMDGPU

amdgpu - это видеодрайвер с открытым кодом, работающий в составе ядра Linux, и созданный AMD в рамках новой стратегии выпуска их проприетарного видеодрайвера. Этот модуль позволяет использовать как полностью свободный графический стек (Mesa, Gallium3D, DDX-драйвер xf86-video-amdgpu, VDPAU, VA-API и так далее) так и использовать новый гибридный драйвер AMDGPU-PRO, пришедший на смену Catalyst. В полной поддержке пока находятся только новые модели видеокарт AMD архитектуры GCN 1.2 (Volcanic Islands: R9 285, R9 380/380X Fury/Nano), поддержка карт архитектур GCN 1.1 ( Sea Islands: HD 7790, HD 8770, Rx 260/260X, Rx 290/290X, R9 295X2, Rx 360, Rx 390/390X, Rx 455) и 1.0 ( Southern Islands: HD 7700+/HD 8000/Rx 200/Rx 300/Rx 400) пока находится в стадии экспериментальной. В этой заметке я расскажу как использовать оба этих драйвера.

Сам по себе драйвер amdgpu является базой для работы графического стека на видеокартах AMD. Он обеспечивает взаимодействие с "ядерными" подсистемами DRM (Direct Rendering Manager) и KMS (Kernel Modesetting), поверх него работает DDX-драйвер xf86-video-amdgpu, который обеспечивает 2D ускорение через GLAMOR посредством Xorg, и библиотеки Mesa (libgl), обеспечивающие 3D-ускорение графики и работу OpenGL. Отдельно работают библиотеки VA-API и VDPAU, обеспечивающие аппаратное ускорение и декодирование видео. Вся эта связка может использоваться вместо драйвера radeonsi + xf86-video-ati. Также для этого драйвера крайне рекомендуется свежее ядро и Mesa, так как идёт очень активное его развитие и с каждым релизом добавляются определённые улучшения.

AMDGPU-PRO - это новый драйвер для видеокарт AMD Radeon, архитектур GCN 1.0 (7700 и выше) и новее, который пришёл на смену Catalyst. Это так называемый гибридный драйвер. Его основой служит драйвер amdgpu поверх которого работает проприетарная реализация OpenGL, Vulkan и OpenCL от AMD. В настоящее время этот драйвер активно развивается, пока не все фичи в нём реализованы полностью. Однако уже сейчас его можно использовать, если вам нужен OpenCL (к примеру для рендеринга объектов в Blender) или Vulkan на картах AMD (свободный Vulkan-драйвер RADV пока далёк от финального состояния). Вот список официально поддерживаемых видеокарт этим драйвером:


Использование AMDGPU


Для GCN 1.1 и 1.0 поддержка экспериментальная, и не включена по умолчанию. Потому необходимо собирать ядро самому, и включить в нём поддержку своей карты. После этого можно установить свободный драйвер xserver-xorg-video-amdgpu, предварительно отключив загрузку драйвера radeon. Для установки драйвера AMDGPU-PRO пересборка ядра не требуется. Как и использование свежей версии ядра. В AMDGPU-PRO модуль ядра собирается при помощи DKMS, и автоматически пересобирается после каждого обновления ядра.

В качестве пациента дистрибутива для примера я буду использовать Ubuntu 16.04. Подойдёт также для всех её производных. Одна из моих видеокарт - Radeon HD 7770 - имеет архитектуру Southern Islands (GCN 1.0). Поддержка этой серии добавлена в ядро начиная с версии 4.9, которое вышло на днях. Идём на сайт ядра за исходниками. Распаковываем их куда будет удобно (я распакую в ~/Kernel_ADMGPU), открываем в этом каталоге терминал и вводим:

make xconfig (для графического интерфейса настройки)

или

make menuconfig (для псевдографического)

Идём по пути Device Drivers  - Graphics support, включаем модуль AMDGPU и ставим галочки на "Enable amdgpu for SI parts" (для GCN 1.0) и/или "Enable amdgpu for CIK parts" (для GCN 1.1).



Сохраняем и приступаем к сборке ядра:

sudo apt install build-essential gcc kernel-package 

fakeroot make-kpkg -j 5 --initrd --append-to-version=-amdgpu kernel_image kernel_headers #-j5

После сборки устанавливаем получившиеся deb-пакеты. Далее открываем конфиг загрузчика GRUB (/etc/default/grub) где прописываем в строку GRUB_CMDLINE_LINUX_DEFAULT= параметр amdgpu.exp_hw_support=1. В итоге строка должна выглядеть как GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.exp_hw_support=1" Сохраняем и обновляем загрузчик:

sudo update-grub

Теперь необходимо отключить загрузку свободного драйвера radeon. Открываем файл /etc/modprobe.d/radeon.conf и пишем туда:

blacklist radeon

Сохраняем и выполняем:

sudo update-initramfs -u -k all
sudo update-grub

Теперь желательно подключить репозиторий со свежей MESA. Например Oibaf PPA. Оттуда установите:

sudo apt install xserver-xorg-video-amdgpu

и перезагрузитесь.

Установка AMDGPU-PRO

ВНИМАНИЕ: карты архитектуры GCN 1.0 пока поддерживаются не все и не полностью. Рекомендуется использовать этот драйвер только для самых новых видеокарт.

Скачайте архив с официального сайта, распакуйте, перейдите в каталог с deb-пакетами и выполните:

sudo sh ./amdgpu-pro-install

На этом всё. Вопросы и дополнения оставляйте в комментариях.

6 комментариев:

  1. > make menuconfig
    make nconfig
    хотя это уже на вкус и цвет
    И да, тот драйвер, который в ядре (не PRO), пока не умеет звук через HDMI !

    ОтветитьУдалить
  2. > Открываем файл /etc/modprobe.d/radeon.conf и пишем туда:
    Таковой файл отсутствует. Создать и записать?
    Ядро обновлял с помощью ukuu без всяких там amdgpu_image в консоли - работать будет?
    ЗЫ. кубунта 16.10, видеокарта 7850.

    ОтветитьУдалить
    Ответы
    1. Да, файл создать. Ядро нужно собирать самому из kernel.org, а не использовать готовое

      Удалить
  3. То есть на твоей HD7700 amdgpu-pro заработал?

    ОтветитьУдалить
  4. И так... Надо было, чтоб заработала видеокарта AMD Radeon R5 M330 для BricsCAD 17, так как много артефактов с Intel HD 5500. На сайте производителя написано, что поддержка есть для Linux только видеокарт Nvidia и AMD. Собрал ядро, как написано высше, версии 4.10.16. После 2 часов компиляции не собрались kernel-headers. Плюнул, установил только один собраный deb-пакет. Пакет xserver-xorg-video-amdgpu ни в какую не захотел установиться, говоря, что надо зависимость xserver-xorg-core (>= 2:1.17.99.902). Сделал sudo apt update и sudo dist-upgrade, обновил пакеты. После настройки запуска, xrandr --listproviders наконец-то увидел карту AMD. Дальше сделал правку в /etc/X11/xinit/xinitrc.d/90-prime.sh по инструкции отсюда - https://vk.com/topic-114916478_33727041. Потом после перезагрузки запустил в терминале DRI_PRIME=1 bricscadv17, чтоб запустить через дискретную карту AMD. Немного лучше стало, но всеравно плохо. Подумал, может надо amdgpu-pro. Установил драйвер, как для R5 M340 с сайта AMD, так как R5 M300 не для Ubuntu 16.04 LTS. После перезагрузки система не заработала, сказав, что некоректно идентифицирован X.org. Пришлось откатиться. Много гемора, а толку ноль. Может кто подскажет, что сделал не так? Как завести amdgpu-pro для R5 M330? На одних сайтах написано, что эта видеокарта на архитектуре GCN 2.0, на других - GCN 1.0.

    ОтветитьУдалить