Instalacja sterownika amdgpu dla starszych kart graficznych AMD

Wszystko związane z jądrem systemowym, sterownikami, sprzętem itp.
Awatar użytkownika
dedito
Moderator
Posty: 3512
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Instalacja sterownika amdgpu dla starszych kart graficznych AMD

Post autor: dedito »

Uwaga: poradnik jest w miarę możliwości aktualizowany, aby go dostosować do bieżących zmian. Informacje o zmianach znajdziesz na końcu.

Poniższy opis popełniłem przy okazji instalacji sterownika amdgpu dla karty Radeon HD 7750 (Cape Verde PRO) w obecnym Debian 9 testing aka Stretch,
aczkolwiek poradnik może być pomocny w przypadku innych kart i systemów.

Dla kogo może być jeszcze pomocny poniższy poradnik?
--------------------------------------------------------------------------------------------
Posiadacze kart AMD z architekturą:
- GCN 1.0 / Southern Islands (https://en.wikipedia.org/wiki/Graphics_ ... _Series.29)
- GCN 2.0 / Sea Islands (https://en.wikipedia.org/wiki/Graphics_ ... _Series.29)
Użytkownicy obecnego stabilnego Debiana 8.x aka Jessie też mogą korzystać z poniższego poradnika, gdyż sterownik ten jest dostępny w backportach.
Nie wspominam o posiadaczach najnowszych kart z architekturą GCN 3 i 4 generacji dla których ten sterownik to chyba jedyny wybór.

Krótki wstęp
---------------------------
Sterownik amdgpu jest otwartoźródłowym sterownikiem kart AMD, następcą sterownika radeon.
Jego zamkniętoźródłowym odpowiednikiem jest amdgpu pro, następca porzuconego fglrx (ostatni kernel 4.2*, ostatni XORG 1.17).

Poradnik wymaga od użytkownika podstawowej wiedzy z zakresu obsługi Debiana.
-----------------------------
1. Co potrzebujemy
-----------------------------
1. W przypadku kart GCN 1.0, jądro w wersji minimum 4.9 z załączonym wsparciem (CONFIG_DRM_AMDGPU_SI=Y). (obecnie dostępne jądro 4.9 w repozytorium experimental ma domyślnie wyłączoną obsługę dla starszych kart)
W przypadku kart GCN 2.0, jądro w wersji minimum 4.2 z załączonym wsparciem (CONFIG_DRM_AMDGPU_CIK=Y).
2. Paczka xserver-xorg-video-amdgpu i firmware-amd-graphics
3. Wyłączony domyślny sterownik radeon (blacklist radeon)

------------------------------------------------------------
2. Jądro ze wsparciem dla starszych kart
------------------------------------------------------------
W przypadku kart z architekturą GCN 2.0 obsługa przez amdgpu powinna być już w jądrach od wersji 4.2.
W przypadku kart z architekturą GCN 1.0 w tym mojej karty Radeon HD 7750 obsługa przez amdgpu została udostępniona w kernelu od wersji 4.9.
Obecnie kernel 4.9 znajduje się jeszcze w repozytorium eksperymentalnym Debiana.
Na dodatek w powyższym kernelu domyślnie wyłączono wsparcie dla starszych kart, więc należałoby dodatkowo przeprowadzić ponowną kompilację jądra.
Ja poszłem na łatwiznę i ściągnąłem kernela ze źródeł zewnętrznych z wkompilowaną obsługą.
Kernel pobrałem z http://www.exton.se/LINUX/ubuntu-kernel ... -exton.zip (aktualizacja: lepiej skorzystać z kerneli https://liquorix.net/ )
Ściągnięte archiwum rozpakowałem i wykonałem instalację:

Kod: Zaznacz cały

dpkg -i linux-headers-4.9.0-11_4.9.0-11.12_all.deb linux-headers-4.9.0-11-exton_4.9.0-11.12_amd64.deb linux-image-4.9.0-11-exton_4.9.0-11.12_amd64.deb
Po przeładowaniu systemu sprawdziłem czy znajduję się już na nowym jądrze:

Kod: Zaznacz cały

uname -a
W moim przypadku wygląda to tak:

Kod: Zaznacz cały

Linux user 4.9.0-11-exton #12 SMP Sat Dec 17 10:10:47 CET 2016 x86_64 GNU/Linux
---------------------------------------------------------------------------------------------
3. Instalacja xserver-xorg-video-amdgpu i firmware-amd-graphics
---------------------------------------------------------------------------------------------
Jeśli, ktoś jeszcze niema poniższych paczek należy je zainstalować (ja już posiadałem).

Kod: Zaznacz cały

apt-get install xserver-xorg-video-amdgpu firmware-amd-graphics
----------------------------------------------
4. Wyłączamy sterownik radeon
----------------------------------------------
Tu mamy dwie metody w zależności od wersji jądra.

W przypadku kerneli w wersji niższe od 4.13, aby skorzystać ze sterownika amdgpu musimy zablokować ładowanie domyślnego sterownika radeon.
Ja to zrobiłem poprzez utworzenie pliku radeon.conf w /etc/modprobe.d/ w którym umieściłem poniższą zawartość:

Kod: Zaznacz cały

blacklist radeon
Po zablokowaniu sterownika robimy restart systemu.

Jeśli nasz kernel jest w wersji 4.13 i wyższej to przełączanie sterowników dokonujemy modyfikując parametry startowe jądra zgodnie z poniższym wpisem:
Karty z rodziny Southern Islands (SI):

Kod: Zaznacz cały

radeon.si_support=0 amdgpu.si_support=1
Karty z rodziny Sea Islands (CIK):

Kod: Zaznacz cały

radeon.cik_support=0 amdgpu.cik_support=1
------------------------------------------------------
5. Sprawdzamy poprawność instalacji
------------------------------------------------------
Po ponownym uruchomieniu systemu sprawdzamy czy załadował się właściwy sterownik.
Wykonujemy komendę

Kod: Zaznacz cały

lspci -k
i w sekcji VGA sprawdzamy czy bieżący sterownik w użyciu to amdgpu.
W moim przypadku wygląda to tak.

Kod: Zaznacz cały

...
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde PRO [Radeon HD 7750/8740 / R7 250E]
	Subsystem: PC Partner Limited / Sapphire Technology Cape Verde PRO [Radeon HD 7750/8740 / R7 250E]
	Kernel driver in use: amdgpu
	Kernel modules: radeon, amdgpu
...
Jak widać mam jeszcze możliwość przełączenia się na sterownik radeon co wykorzystałem do przeprowadzenia testów porównawczych.

---------------------------------------------------
6. Wydajność nowych sterowników
---------------------------------------------------
Dla sprawdzenia wydajności sterowników amdgpu i radeon na kernelu 4.9, przeprowadziłem pojedynczy test z użyciem glxgears i Unigine Heaven Benchmark 4.0.
Wynik potyczki radeon vs amdgpu w moim przypadku należy uznać za remisowy gdyż wyniki były praktycznie identyczne z delikatną (w granicach błędu pomiarowego) przewagą amdgpu.

----------------------------------------------------------------------------------------------------
7. Wsparcie zamkniętych sterowników amdgpu pro dla starszych kart
----------------------------------------------------------------------------------------------------
Uwaga: punkt wymaga aktualizacji ze względu na dodanie wsparcia amdgpu-pro dla starszych kart
Obecnie amdgpu pro nie wspiera starszych kart, aczkolwiek są wzmianki, że AMD dopisze wsparcie dla tych kart.
Pozostaje trzymać kciuki i czekać na spełnienie powyższej obietnicy.

---------------------------------------------------------------------------------------------------------------------
Źródła którymi wspierałem się, przy instalacji sterownika i opracowaniu poradnika.
---------------------------------------------------------------------------------------------------------------------
Jak zawsze genialne archwiki bez którego ten poradnik by nie powstał https://wiki.archlinux.org/index.php/AMDGPU
Obecnie wspierane karty przez zamknięty sterownik amdgpu pro http://support.amd.com/en-us/kb-article ... Notes.aspx
Wspomnienie o wsparciu dla starszych kart w zamkniętym sterowniku https://www.phoronix.com/scan.php?page= ... ental-Code
Koniec wsparcia dla fglrx https://streamcomputing.eu/blog/2016-09 ... 8-support/
Nowy sposób przełączania sterowników od jąder w wersji 4.13: https://www.phoronix.com/scan.php?page= ... n101&num=1

---------
Uwagi
--------
Jeśli znalazłeś jakieś rażące błędy, poinformuj mnie o tym.
*W backportach Jessie jest dostępny sterownik dla kernela 4.8.

Aktualizacje:
2018-11-30 Dedito: aktualizacja opisu o przełączanie sterowników dla kerneli 4.13 i wyższych
ODPOWIEDZ