Friday, May 26, 2023

Основные сведения о драйверах (не проприетарных) к видеокартам AMD, Intel и Nvidia.

Источник - портал OpenSUSE: https://forums.opensuse.org/t/amd-intel-nvidia-x-graphics-driver-primer-third-edition/148576


"Драйверы" к видеоадаптерам для X - как Xorg, так и Wayland - состоят из множества компонент или слоёв. Эта статья рассматривает только первые два слоя и только для видов FOSS (Free & Open-Source Software), включенных в репозитории и установочные носители Open SUSE.


Первый слой - kernel devise driver. В каждом ядре есть один или более модулей (драйверов) для видеокарт каждого из производителей. Для AMD это amdgpu для более новых устройств (APU, GPU, IGP) и radeon для старых. Для подавляющего большинства адаптеров Intel это i915, и для некоторых конфигураций SOC - gma500. Для NVidia - только nouveau. Эти модули ядра обеспечивают функциональность под названием Kernel ModeSetting (KMS), от которой всегда зависят драйверы дисплея для X.


Все оригинальные базовые драйверы дисплея для Х зависят от оборудования и поэтому называются DDX - Device Dependent X (display driver). Названия базовых драйверов: amdgpu (для новых карт amd), radeon (для старых); intel - для карт intel; nouveau -  для nvidia. Эти драйверы представлены пакетами xf86-video-*, установка которых опциональна. Однако, существует более новая технология универсального драйвера для Х - ей более восьми лет, - в которой драйвер работает так, будто зависит от устройства, но на самом деле поддерживает видеоадаптеры любого производителя. Эта технология называется modesetting. Драйвер modesetting не является опциональным, так как входит в пакет Х-сервера, а также является независимым от аппаратного обеспечения, т.е. DIX - Device Independent X. Так как он относительно новый, то не поддерживает старые GPU (примерно до 4 поколения карт intel  и карт других вендоров выпуска до 2007-2008 года).


Хотя modesetting является драйвером дисплея по умолчанию, и пакеты xf86-video-* необязательны, большинство установочных образов OpenSUSE содержат метапакет xorg-x11-driver-video, в который включены все драйверы типа xf86.... Благодаря наличию этого метапакета установочный носитель поддерживает старые видеокарты, для которых не подходит modesetting. Для таких устройств устанавливаются драйверы xf86-video-* вместо modesetting, и поэтому многие пользователи, говоря о графических драйверах, даже не знают о существовании modesetting DIX. А из-за схожести названий модулей ядра и драйверов дисплея при обсуждении графических "драйверов" часто происходит подмена термина: люди говорят о драйвере дисплея, а подразумевают модуль ядра, и наоборот. 


Если вы хотите использовать modesetting DIX, то вам проще всего будет удалить из системы метапакет xorg-x11-driver-video со всеми драйверами xf86-video-*. Какой из драйверов покажет лучшую производительность - modesetting или xf86, - можно определить только опытным путём. Тиринги и другие проблемы часто устраняются или смягчаются путём замены драйвера дисплея Х. 


Для Х-сервера существуют и другие драйверы, не зависящие от KMS и поддерживающие любое оборудование - это FBDEV и VESA. Но они обеспечивают ограниченную функциональность: не дают аппаратного ускорения, поддерживают ограниченное число разрешений экрана (обычно это 4:3, т.е. 1280х1024, 1600х1200, а чаще только 1024х768). Они подходят для действий по восстановлению системы или для серверов, где графическая оболочка почти не используется. Нередко они требуются при установке: если загрузка ядра сконфигурирована с параметром nomodeset. Этот параметр исключает использование всех FOSS драйверов дисплея, что приводит к сниженной производительности графики либо к чёрному экрану вместо графического окна входа в систему, что решается только удалением modeset из параметров загрузки.


Подводя итог, для корректной работы Х-сервера требуются следующие драйверы:


amdgpu 

(kernel)+amdgpu (DDX) или modesetting (DIX) для новых устройств AMD.

radeon 

(kernel)+radeon (DDX) или modesetting (DIX) для старых устройств AMD/ATI.

gma500

(kernel) или i915 (kernel)+intel (DDX) или modesetting (DIX) для устройств Intel.

nouveau 

(kernel)+nouveau (DDX) или modesetting (DIX) для устройств NVidia.