Дата и время публикации :
Теория и практика
1. Теория
В статье, посвященной составу программному обеспечению графического обеспечения Wayland уже говорилось о том, что включение/выключения функции KMS подсистемы DRM осуществляется на уровне ядра. Поэтому неудивительно, что название подсистемы DRM (англ. Direct Rendering Manager) смешивают с её функцией KMS, которая обеспечивает неразрывную обратную совместимость программного интерфейса подсистемы DRM.
Таким образом,
- функция "выставки режима ядром" (англ. Kernel Mode-Setting,KMS) является неотъемлемой частью драйвера DRM, который в свою очередь зависит от своей аппаратной реализации;
- она, эта функция, обеспечивает достаточно быстрое переключение режимов для оконной графической среды на базе протоколаWayland и терминала, а так же обычно применяемого разрешения виртуальных терминалов, использующие стандартное разрешение экрана 800×600 на панели 1024×600 и глубину цветового диапазоана (в гамме).
2. Практика
В Debian включение KMS производится последовательным вводом следующих команд, как показано в дампе 2.1
Дамп 2.1
user@home2:~$ sudo echo "GRUB_GFXMODE=1152x864x24" >> /etc/default/grub user@home2:~$ sudo echo "GRUB_GFXPAYLOAD_LINUX=keep" >> /etc/default/grub user@home2:~$ sudo update-grub
Как видно из выставляемого значения переменной GRUB_GFXMODE, она представдяет собой сочетание нескольких параметров в следующем формате:
<screen-width>X<screen-heigh>X<screen-depth> ,
Где
- <screen-width> – ширина видимой части экрана в пискселях,
- <screen-width> – высота видимой части экрана в пискселях,
- <screen-depth> – глубина цвета.
В тоже время, переменной GRUB_GFXPAYLOAD_LINUX устанавливается значение ‘keep’, для того, чтобы ядро поддержало выставленное разрешение экрана
Отключение производится путем добавления опций загрузки ядра опции nomodeset , что можно добиться следующим образом, как показано в дампе 2.2
Дамп 2.2
user@home2:~$ nano /etc/default/grub ... GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset" ... # GRUB_GFXMODE=1152x864x24 GRUB_GFXPAYLOAD_LINUX=text ... user@home2:~$ sudo
При этом, до включения функции KMS, необходимо установить пакет с поддержкой DRM/KMS на уровне ядра для выбранного семейства графического процессора GPU, который объединяет сразу несколько моделей одного или нескольких производителей.
Но, установка (настройка) отдельно функции DRM/KMS в ядре GNU/Linux не требуется, т.к. обычно настроено в ходе удовлетворения зависимостей, которые находятся в разделе Device Drivers:
Device Drivers ---> Graphics support --->
В дампе 2.3 показана настройка DRM для триады широкоприменяемых графических карт AMD/Intel/Nvidia .
Дамп 2.3
Device Drivers ---> Graphics support ---> <*/M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> <*/M> ATI Radeon <*/M> AMD GPU <*/M> Nouveau (NVIDIA) cards <*/M> Intel 8xx/9xx/G3x/G4x/HD Graphics -*- Enable legacy drivers (DANGEROUS) ---> Frame buffer Devices ---> Backlight & LCD device support ---> Console display driver support --->
Как показано в дампе 2.3, для поддержки функции DRM/KMS, указанной широкоизвестной триады производителей графических адаптеров, их драйверы должны быть выставлены, как показано в дампе 2.4
Дамп 2.4
<M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> <M> ATI Radeon <M> AMD GPU <M> Nouveau (NVIDIA) cards <M> Intel 8xx/9xx/G3x/G4x/HD Graphics
Раздел "Enable legacy drivers" для старых графических адаптеров оставлен в ядре 5-й версии для обратной совместимости, поэтому его можно пропустить.
В результате сделанные настройки в разделе "Graphics support" будут сохранены в виде config-переменных в файле конфигурации ядра .config, быстрою проверку которых без собственно ручного перетряхивания ядра можно провести введя в командной строке последовательность команд, показанную в дампе 2.5
Дамп 2.5
user@home2:~$ cat /boot/config-`uname -r` | sed -n -e '/#/d' -e 's/.*\(CONFIG_DRM.*\).*/\1/p'
...
CONFIG_DRM=m
...
CONFIG_DRM_RADEON=m
...
CONFIG_DRM_AMDGPU=m
...
CONFIG_DRM_NOUVEAU=m
...
CONFIG_DRM_I915=m
...
Из которого видно, что должны быть выставлены следующие переменные в конфигурации ядра:
- CONFIG_DRM=m, если M установлено напротив "Direct Rendering Manager",
- CONFIG_DRM_RADEON=m, если M установлено напротив "ATI Radeon",
- CONFIG_DRM_AMDGPU=m, если M установлено напротив "AMD GPU",
- CONFIG_DRM_NOUVEAU=m, если M установлено напротив "Nouveau (NVIDIA) cards",
- CONFIG_DRM_I915=m, если M установлено напротив "Intel 8xx/9xx/G3x/G4x/HD Graphics".
CONFIG_DRM=m CONFIG_DRM_KMS_HELPER=yCONFIG_DRM_RADEON, CONFIG_DRM_AMDGPU, CONFIG_DRM_NOUVEAU Требуют соблюдения следующих зависимостей CONFIG_HAS_IOMEM=y и CONFIG_DRM=m и CONFIG_PCI=y и CONFIG_MMU=y CONFIG_DRM_I915 Имеет иной джентельментский набор CONFIG_HAS_IOMEM=y и CONFIG_DRM=m и CONFIG_PCI=y и CONFIG_X86=y. CONFIG_PCI, CONFIG_MMU Выставляется при установки используемой аппаратной платформы микропроцессорной архитектуры x86,config-переменной CONFIG_X86=y.
3. Библиография
3.1 Wayland.freedesktop.org. The architecture
3.2 CONFIG_DRM: Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)