Дата и время публикации : Дата и время модификации:
Теория и практика
1. Теория
Если рассматривать программное обеспечение от начала начал, а именно беря за отправную точку аппаратное обеспечение или средства вычислительной техники, оно окажется многослойным, потому что каждый слой является обволакивающим предыдущий исходя из условий и требований, предъявляемых средой функционирования.
Архитектура Wayland
Поэтому логично представить модель визуализации и отображения (англ. Rendering model) в виде многослойной круговой диаграммы, как это делали раньше в старых учебниках, представленной на рисунке 1.1
Рисунок 1.1
Hardware resources(HWs)
В качестве аппаратных вычислительных средств или ресурсов (англ. Hardware resources) принимается оперативное запоминающее устройство ОЗУ (Random Access Memory, RAM), адаптер графического процессора GPU, устройство центрального процессора ЦПУ (Central proccesor unit, CPU), устройства ввода, такие как клавиатура и ручные манипуляторы позицей курсора тачпад, мышь, трекболы и графические планшеты.
Direct Rendering Manager(DRM)
Менеджер непосредственным (прямым) управлением визуализации и/или аппаратным ускорения (англ. Direct Rendering Manager, DRM) является подсистемой ядра GNU/Linux, которая является частью инфраструктуры визуализации окружения графической реализации (Directory Rendering Infrastructre, DRI) протокола Wayland для обеспечения прямого доступа к аппаратным средствам адаптер GPU.
DRI реализован в виде ioctl-запросов, соответствующие функциям прикладного интерфейса (Application program interface, API) подсистемы DRM, для доступа к которым используется библиотека libdrm.
Таким образам, библиотека libdrm обеспечивает взаимодействие прикладных программ с GPU, в данном случае композитного менеджера окон Wayland Compositor, через функциями прикладного интерфейса (Application program interface, API) подсистемы DRM.
Доступ с пользовательского уровня к функциям DRM на уровне ядра производится с использованием символьных файлов устройств /dev/dri/cardX, которые находятся в директории /dev/dri и создаваемые драйвером. В Debian GNU/Linux, драйверы определены в виде отдельных модулей в директории /lib/modules/$(uname -r)/kernel/drivers/gpu/drm , которые подготавливаются во время запуска графической среды протокола Wayland.
Kernel mode-settings(KMS)
В рассматриваемой DRI настройки режима отображения (англ. display mode) вынесены на уровень ядра (англ. kernel mode-setting, KMS), позволяя тому же Wayland Compositor осуществлять управление разрешением экрана (англ. screen resolution), глубиной цвета (англ. color depth) и частотой обновления или синхронизации (англ. refresh rate) без вынесения функций управления настройки на пользовательский уровень (англ. User-space mode-setting, UMS).
При этом, во избежание нарушения обратной совместимости, KMS является дополнительной частью драйвера DRM, которые во время регистрирации в системе указывают о такой поддержки. Поэтому такие драйверы DRM часто называют драйверами KMS в отличие от обычных драйверов без поддержки DRM/KMS.
Для поддержки аппаратного ускорения 3D некоторыми приложениями (клиентами Wayland) используется Mesa 3D или её аналоги, такие как Vulkan, OpenCL или OpenGL . В тоже время, доступ к клиентов к библиотекам 3D может осуществляться непосредственно или через Wayland Compositor, как показано на рисунке 1.1
На том же рисунке 1.1 показано, что доступ клиентов Wayland к устройствам ввода осуществляется через Wayland Compositor, который использует для этого библиотеку libinput.
2. Практика
В случае использования Debian GNU/Linux, слоистый пирог представляет собой множество библиотек и приложений, в т.ч. демона Weston, который руководит всеми объектами графической сценой, которые основаны на слоях, показанные на рисунке 1.1
2.1 На уровне ядра
Прежде всего пакет, содержащий встроенные "свободные" драйверы ниже перечисленных и широко используемых графических процессоров GPU в архитектуре x86-64 известной узкому кругу специалистов как amd64. Соответственно,
Пакет (мета) linux-image-amd64
Обычно содержит в зависимостях пакет с действующей версией ядра файла образа архитектуры amd64. Так на момент публикации таким пакетом был linux-image-5.4.0-2-amd64 .
Прежде всего пакеты, содержащие файлы микропрограммы бинарного кода или (прошивки) для плат графических адаптеров, так
Пакет (мета) firmware-linux
Приводит к установке пакета, который содержит другой значимый мета-пакет, который запускает всю цепочку установки необходимых пакетов с прошивками, так
В виду череды других пакетов фигурирующих в зависимостях данного мета-пакета, разумно произвести установку фактически нужных, как показано на примере использования графического адаптера GPU в листинге 2.1
Листинг 2.1
user@home2:~$ sudo apt install firmware-amd-graphics firmware-amd-graphics
Кроме того,
Пакет (мета) firmware-linux-nonfree
Приводит к установке сразу трех пакетов, которые содержат "несвободные" (или протаетарные) "прошивки" для графических процессоров GPU, реализующие включение/выключения функции KMS подсистемы DRM для:
- AMD/ATI семейства, "встроенный" в ядро Linux драйвер radeon, amdgpu и r128;
- семейства NVIDIA, "встроенный" в ядро Linux драйвер Nouveau;
- семейства Intel, наиболее распространенный драйвер i915 ядра Linux;
Поэтому выше перечисленные "прошивки" к драйверам устанавливают:
Пакет firmware-amd-graphics
Содержит "прошивки" для плат (адаптеров) графических процессоров GPU (англ. Graphical Processor Unit), базирующиеся на чипах AMD/ATI.
Пакет firmware-misc-nonfree
Содержит "прошивки" для плат (адаптеров) графических процессоров GPU семейства NVIDIA и Intel.
Поэтому в остальных случая, если используется графических процессоров GPU семейства NVIDIA и Intel, будет достаточно установить пакет firmware-amd-graphics, как показано в листинге 2.2
Листинг 2.2
user@home2:~$ sudo apt install firmware-misc-nonfree
2.2 На пользовательском уровне
2.2.1 Библиотека libinput
Cогласно источнику библиотека представлена двоичными (бинарными) пакетами, необходимые для непосредственного обращения к устройствам ввода и для минимизации используемого кода отдельными програмами и серверными приложениями на пользовательском уровне.
Пакет libinput-bin
обеспечивает обнаружение, управление устройствами ввода и обработку от них получаемых событий подситемой udev
Пакет libinput-tools
обеспечивает установку актуальной версии библиотеки libinput и набора необходимых утилит для организации обработки получаемых событий от устройств ввода.
Листинг 2.1
user@home2:~$ apt install libinput-bin libinput-tools
2.2 Библиотека libdrm / libkms для доступа к DRM и её функции KMS
Библиотеки libdrm используется прикладным программным окружением (англ. application framework) для настройки, управления, обновления источников и содержимого экрана с помощью функций-оберток, обеспечивающие доступ к DRM/KMS.
В Debian для выше указанных драйверов и программного обеспечения прикладного уровня выполнение графических приложений определены следующие пакеты для доступа к подсистеме DRM/KMS .
Пакет libdrm-amdgpu1
Содержит програмный интерфейс для обращения к зависимыми от драйвера amdgpu частям подсистемы DRM во время выполнения прикладного графического приложения.
Пакет libdrm-intel1
программный интерфейс к функциям,и обеспечивающие доступ к зависимым частям графического драйвера intel на уровне ядра, подсистемы DRM.
Пакет libdrm-nouveau2
Обеспечивает тоже самое, что и пакеты libdrm-intel1 и libdrm-nouveau2, но только для драйвера nouveau
Пакет libdrm-common
На самом деле чем хорош Debian, так это своими пакетами, объединяющие множество подобных пакетов, порожденных от пакета исходного кода.
Так пакет libdrm-common, является мета пакетом и кроме зависимостей ничего не содержит чему свидетелем является перечень устанавливаемых файлов .
Поэтому установка пакетов DRM производится достаточно просто установить данный мета-пакет, как показано в листинге 2.2
Листинг 2.2
user@home2:~$ apt install libdrm-common
Кроме вышеперечисленных трех пакетов, в него входит еще несколько пакетов, формирующих инфраструктуру доступа к DRM/KMS и сведения о которых можно почерпнуть из описания к пакету исходного кода .
2.2.2 Библиотека 3D
За интерактивное отображение трехмерной графики 3D (англ. rendering interactive 3D graphics) в Debian/Linux отвечает библиотека mesa, которая поддерживает все возможные графические API, включая OpenGL ES (versions 1, 2, 3), OpenCL, OpenMAX, VDPAU, VA API, XvMC и Vulkan.
Разнообразие поддерживаемых подсистем DRM позволяет библиотеки mesa использоваться в различных окружениях отображения графики от ее эмуляции до полной реализации акселерации современными графическими процессорами (англ.GPU).
В Debian/Linux библиотека mesa, представлена одноименным пакетом исходного кода, который формирует набор пакетов, реализующие всю поддержку вышеперечисленных API.
Установка библиотек mesa производится, как показано в листинге 2.3
Листинг 2.3
user@home2:~$ sudo apt install mesa-utils
Пакет mesa-utils
устанавливает вместе с программами-утилитами будет установлен базовый набор библиотек, обеспечивающих поддержку режима отображения и визуализации объектов mesa 3D.
2.2.3 Композитного менеджера окон Wayland Compositor
Фактическая реализация Wayland Compositor согласно схеме, представленной ранее архитектуры графическое среды реализуемой протоколом Wayland . Установка пакеты Weston показана в листинге 2.4
Листинг 2.4
user@home2:~$ sudo apt install weston
При этом apt может запросить установку дополнительного множества пакетов, например, перечисленных в дампе 2.5
Дамп 2.5
gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaom0 libavcodec58 libavutil56 libcairo2 libcdparanoia0 libcodec2-0.8.1 libcolord2 libcroco3 libdatrie1 libegl1-mesa libfreerdp2-2 libfribidi0 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgles2 libgsm1 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libigdgmm11 libjbig0 liblcms2-2 libmp3lame0 libnuma1 libogg0 libopenjp2-7 libopus0 liborc-0.4-0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 librsvg2-2 librsvg2-common libshine3 libsnappy1v5 libsoxr0 libspeex1 libswresample3 libthai-data libthai0 libtheora0 libtiff5 libtwolame0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvisual-0.4-0 libvorbis0a libvorbisenc2 libvpx6 libwavpack1 libwayland-cursor0 libwayland-egl1 libwebp6 libwebpmux3 libweston-6-0 libwinpr2-2 libx264-155 libx265-179 libxcb-composite0 libxkbfile1 libxml2 libxvidcore4 libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers shared-mime-info va-driver-all vdpau-driver-all weston
После успешной установки для получения картинки, показанной на рисунке 2.2, достаточно выполнить команду, показанную в листинге 2.6
Листинг 2.6
user@home2:~$ weston
В результате на экране (монитора) должна наблюдаться картинка, показанная на рисунке 2.2
Рисунок 2.2
3. Библиография