Настройка графической подсистемы

Общее конфигурирование графической подсистемы и встроенных средств композиции.

Особенности архитектуры
Конфигурация графической подсистемы
Настройка контроллера дисплея
Настройка мультидисплейных конфигураций
Выбор 3D стека и драйверного обеспечения сервиса композиции
Настройка сервиса поддержки драйверов Linux (io-lxdev)
Настройка сервиса композиции (io-composer)
Адресная настройка драйверного обеспечения
Настройка оконного менеджера и модулей ввода

Особенности архитектуры

Особенности функционирования библиотеки несколько отличаются от оригинального проекта как при реализации группы стандартов OpenGL ES:

┌───────────────────────────────────────────┐ │ │ │ Приложение │ │ │ └─────┬───────────────┬───────────────┬─────┘ │ │ │ ┌─────▾─────┐ ┌─────▾─────┐ ┌─────▾─────┐ │ │ │ │ │ │ │ FreeGLUT, ◂───▸ GLVND │ │ libgf ◂──────────┐ │ GLU, GLEW │ │ │ │ libscreen │ │ │ │ │ │ │ │ │ └───────────┘ └─────▴─────┘ └─────▴─────┘ │ │ │ │ ┌─────▾───────────────▾─────┐ ┌──────▾──────┐ ┌────────────┐ │ │ │ │ │ │ │ io-composer ◂───▸ io-display ◂───▸ io-lxdev │ │ │ │ │ │ │ └───────────────────────────┘ └─────────────┘ └────────────┘

Конфигурация графической подсистемы

Настройка графической подсистемы включает в себя несколько этапов:

  1. Выбор и настройка драйвера контроллера дисплея
  2. Настройка мультидисплейных конфигураций
  3. Настройка дополнительных модулей 2D/3D акселерации и выбор соответствующего 3D стека

Рассмотрим эти этапы подробнее.

Настройка контроллера дисплея

Обслуживание драйверного обеспечения контроллеров дисплеев является ответственностью менеджера ресурсов io-display. Выбор конкретного драйвера, и настройка io-display должны осуществляться исходя из фактического оборудования. Менеджер имеет единственный конфигурационный файл /etc/system/config/display.conf.


Caution: При настройке драйверного обеспечения рекомендуется отключить автоматический запуск Photon, поскольку некоторые эксперименты могут привести к зависанию устройства. Уже после определения финальной конфигурации эти изменения можно обратить. Если запуск Photon осуществляется из стандартного скрипта ph, то отключить его автоматическое исполнение можно через файл /etc/system/config/nophoton.

Также целесообразно настроить удаленный доступ к системе, так как невозможность перейти в графический режим в подавляющем большинстве случаев не приводит к неработоспособности всей системы. Так, например, в процессе неудачного запуска io-display добавляются записи в системный лог slogger.


Стоит также отметить, что при настройке графической подсистемы рекомендуется по возможности отказаться от использования приложения phgrafx. Являясь частью оконного окружения Photon, это приложение обеспечивает лишь обратную совместимость с предшествующими версиями ЗОСРВ и не поддерживает возможность управления конфигурационными файлами драйверов, выбор и настройку 3D стеков, настройку аппаратной композиции и портированных из Linux драйверов. В общем случае применение phgrafx позволяет выполнять простейшие манипуляции, но в более сложных сценариях это является источником неочевидных проблем в конфигурации графической подсистемы.


Warning: Снятие слепков памяти процесса, использующего некоторые графические драйверы, может приводить к отказу в обслуживании графического контроллера и даже всей системы. При настройке графической подсистемы настоятельно рекомендуется отказаться от использования утилиты dumper.

Формат конфигурационного файла и доступные для редактирования параметры детально описаны на соответствующей странице.

В минимальном исполнении следует настроить следующие поля конфигурационного файла:

device {
photon {
driver {
drivername=skylake
modeopts=
}
}
drivername=skylake
vid=0x8086
did=0x1912
deviceindex=0x0
display {
xres=1920
yres=1080
refresh=60
pixel_format=argb8888
}
}

Краткое описание параметров

drivername – определяет имя загружаемого драйвера
Поиск драйверов менеджером io-display осуществляется в директории /lib/dll с добавлением префикса devg-* к имени загружаемой библиотеки. Выбор драйвера контроллера дисплеев может потребовать проведения некоторых несложных изысканий: В секции photon параметр drivername определяет лишь перечень доступных для данного оборудования драйверов (путем дублирования блока driver). Вне этой секции параметр drivername определяет фактически используемый драйвер.

Note: При изменении фактического драйвера через drivername требуется перезапуск менеджера io-display.

vid – определяет PCI-идентификатор производителя оборудования
did – определяет PCI-идентификатор контроллера
deviceindex – определяет PCI-индекс устройства на шине, если таких устройств несколько (по умолчанию должен быть равен 0)
Данная группа параметров позволяет ассоциировать запись в конфигурационном файле с конкретным графическим контроллером. Если контроллер дисплея является устройством на шине PCI, то его идентификаторы можно получить с помощью утилиты pci. В противном случае значения параметров vid и did могут быть произвольными, а запуск io-display принимает вид (при установке в конфигурационном файле обоих параметров в значение 0):
io-display -dvid=0,did=0
xres – определяет разрешение дисплея по оси X
yres – определяет разрешение дисплея по оси Y
refresh – определяет частоту обновления дисплея в Гц
Совокупность этих параметров позволяет графической подсистеме и соответствующему драйверу определить точные параметры modeline устанавливаемого видео-режима. io-display сопоставляет тройку параметров с содержимым файла /etc/system/config/crtc-settings и при первом точном их совпадении использует найденный modeline в качестве параметров видео-режима. Если же запись не найдена, менеджер будет пытаться подобрать настройки и с некоторой вероятностью это приведет к некорректному изображению.

Note: Ряд драйверов мобильных графических контроллеров (например, devg-imx6x.so) игнорируют файл /etc/system/config/crtc-settings при определении modeline. При этом они имеют дублирующие опции для задания таймингов редима в конфигурационном файле драйвера (см. раздел Адресная настройка драйверного обеспечения; для драйвера devg-imx6x.so таким конфигурационным файлом является /etc/system/config/imx6x.conf).


Note: Конфигурационный файл можно /etc/system/config/crtc-settings можно модифицировать. При этом могут быть полезны утилиты ddc, umc и modeline-converter.

Данную тройку параметров также использует Photon для установки конкретного разрешения монитора.
pixel_format – пиксельный формат дисплея
Доступные значения представлены на странице /etc/system/config/display.conf.

После редактирования конфигурационного файла io-display сам менеджер следует перезапустить. Если уже запущены какие-либо графические приложения, включая оконное окружение Photon, их следует терминировать перед io-display. Применение новых параметров произойдет при повторном запуске менеджера.

При этом стоит отметить, что драйвер не всегда в состоянии точно предугадать физический порт контроллера дисплея, который требуется использовать для вывода изображения на экран. Для этого в конфигурационных файлах драйверов (см. раздел Адресная настройка драйверного обеспечения) могут присутствовать конкретные опции. Например, у драйвера devg-skylake.so для этих целей имеются опции 1st, 2nd и 3rd, определяющие физические интерфейсы для вывода максимум трех независимых изображений. Перечень этих параметров и их значения полностью определяет конкретный драйвер и его конфигурационный файл.

Настройка мультидисплейных конфигураций

При настройке мультидисплейных конфигураций требуется ряд дополнительных действий.

В первую очередь следует внести в /etc/system/config/display.conf изменения вида:

device {
photon {
driver {
drivername=skylake
modeopts=
}
}
drivername=skylake
vid=0x8086
did=0x1912
deviceindex=0x0
display {
xres=1920
yres=1080
refresh=60
pixel_format=argb8888
photon {
enabled=1
xoffset=0
yoffset=0
input_group=1
}
}
display {
xres=1920
yres=1080
refresh=60
pixel_format=argb8888
photon {
enabled=1
xoffset=0
yoffset=1080
input_group=1
}
}
}

В такой конфигурации должно присутствовать несколько секций display по числу дисплеев. При этом в рамках каждой секции display доступны параметры, которые оказывают непосредственное влияние на мультидисплейные окружения:

enabled – определяет необходимость включения данного дисплея
По умолчанию значение 1.
xoffset
yoffset
Данные параметры определяют логическю позицию дисплея на рабочем столе.
input_group
Определяет принадлежность группе драйверов ввода-вывода.

Кроме этих настроек ряд драйверов (например, devg-skylake.so) через свои конфигурационные файлы позволяют настраивать режим функционирования мультидисплейной конфигурации:

Выбор портов контроллера дисплеев в этом случае выполняется аналогично вышесказанному (также см. раздел Адресная настройка драйверного обеспечения).

Выбор 3D стека и драйверного обеспечения сервиса композиции

Выбор драйверного обеспечения сервиса композиции

Многие модули графической подсистемы идентифицируют конфигурации сервиса композиции, оконного окружения и модульных драйверов через переменную окружения GRAPHICS_ROOT. Она должна указывать на директорию, содержащую конфигурационные файлы и драйверный набор для конкретной платформы. Обычно целевая директория располагается по адресу /usr/lib/graphics/<platform>.

Кроме того, для успешной загрузки драйверных библиотек переменная окружения LD_LIBRARY_PATH должна быть настроена с учетом GRAPHICS_ROOT. Пример настройки переменных окружения:

export GRAPHICS_ROOT=/usr/lib/graphics/iMX6X
export LD_LIBRARY_PATH=$GRAPHICS_ROOT:$LD_LIBRARY_PATH

Данные системные переменные должны быть установлены для процесса io-display (при использовании совместно с devg-screen.so), а также для каждого клиента графической подсистемы, включая Photon. Для io-display сложно однозначно указать способ установки переменных, поскольку он может запускаться как из загрузочного образа (тогда переменные нужно устанавливать прямо в файле построения загрузочного образа), так и из загрузочных скриптов /etc/system/sysinit или /etc/rc.d/rc.* (переменные ы этом случае должны устанавливаться в этих же скриптах). Кроме того io-display может быть запущен вручную из консоли. Для клиентских же приложений удачным способом установки переменных является файл profile.

Выбор 3D стека

Данный вопрос включает следующие аспекты:

Поиск и подгрузку конкретной реализации 3D стека обеспечивает загрузчик GLVND. Идентификация библиотек производится также через переменную окружения GRAPHICS_ROOT, рассмотренной выше. В соответствии с содержимым конфигурационного файла $GRAPHICS_ROOT/graphics.conf загрузчик подгружает перечисленные в нем библиотеки и позволяет прикладному коду работать единообразно даже при переключении на другие стеки (для этого требуется перезапуск приложения с переназначенными переменными окружения).

В настоящий момент поддерживаются следующие стеки:

  1. Проект Mesa – открытый стек для устройств различных производителей (также поддерживает программный рендеринг)
  2. Screen/vivante – стек 3D ускорителей Vivante, функционирующий только в композитном режиме


Note: Все стеки представляют собой библиотеки акселерации OpenGL/OpenCL со вспомогающими компонентами. Они размещаются в директориях вида /usr/lib/graphics/<platform>, где <platform> соответствует целевой системе.

Выбор стека следует производить согласно их описанию и перечню поддерживаемых устройств. Если GLVND не может найти стек, соответствующий установленным переменным окружения, то будет произведена попытка загрузить библиотеки проекта Mesa, которые на поддерживаемых платформах размещаются по адресу /usr/lib/graphics/mesa.

Настройка сервиса поддержки драйверов Linux (io-lxdev)

Настройка сервиса композиции (io-composer)

Основные настройки сервиса доступны в конфигурационном файле $GRAPHICS_ROOT/screen.conf.

Адресная настройка драйверного обеспечения

Многие драйверы (особенно драйверы контроллеров дисплеев) имеют собственные конфигурационные файлы, которые располагаются в директории /etc/system/config/. Общее правило таково, что конфигурационный файл должен называться по имени драйвера, но без префикса. Например, драйверу devg-chips.so соответствует конфигурационный файл /etc/system/config/chips.conf. Однако, ряд драйверов поддерживает несколько принципиально разных семейств контроллеров, что требует наличия нескольких конфигурационных файлов. такая ситуация, например, у драйвера devg-skylake.so. Выяснить точное назначение и имена конфигурационных файлов можно только на странице с описанием драйвера.

В конфигурационном файле драйвера могут настраиваться режим работы контроллера (клонирование изображения, мультидисплейность, ...), активироваться расширенный отладочный вывод, включаться опциональные возможности, определяться физические интерфейсы и порты контроллера дисплея и др. У мобильных и встраиваемых контроллеров через конфигурацию может также происходить точная настройка таймингов видео-режима и LCD-панелей.

Конфигурационный файл драйвера определяется через параметр modeopts в /etc/system/config/display.conf:

device {
photon {
driver {
drivername=skylake
modeopts=
}
}
drivername=skylake
modeopts=/etc/system/config/skylake.conf
...
}

Если параметр modeopts не указан, то драйвер может попытаться открыть свой конфигурационный файл по стандартному пути или использовать значения собственных параметров по умолчанию.

Настройка оконного менеджера и модулей ввода

Модули ввода для композитного окружения, а также соответствующее оконное окружение могут быть настроены в соответствии с параметрами, перечисленными в $GRAPHICS_ROOT/screen.conf. Настройка оконного менеджера детально описана в разделе Настройка оконной подсистемы.




Предыдущий раздел: Руководство пользователя