Spec-Zone.ru › Qt 5.12

Qt для VxWorks

Qt для VxWorks доступен только по коммерческой лицензии.

Обратитесь в The Qt Company для получения дополнительной информации: https://www.qt.io/contact-us/

Поддерживаемые архитектуры и версии VxWorks

Qt 5.5 в настоящее время протестирован и поддерживается на VxWorks 7 версии SR0480 от 2016-09-16. Поддерживаемая архитектура — ARM-v7.

Если вас интересуют более поздние версии Qt, пожалуйста, свяжитесь со службой поддержки Qt.

Пакет исходных кодов Qt для VxWorks

Qt для VxWorks поставляется через Qt Account под названием Qt 5.5.1 > Qt VxWorks Платформенный пакет исходных кодов.

Требования к VxWorks

Приложения QtWidget

  • Устройство фреймбуфера (FBDEV)
  • Поддержка Evdev (режим совместимости)
  • Поддержка POSIX
  • Поддержка C++11

Приложения Qt Quick 2

Все функции, необходимые для приложений QtWidget, а также следующие:

  • Устройство GPU (GPUDEV) для OpenGL ES 2.0

Поддерживаемые модули

Поддерживается почти все необходимые модули Qt и некоторые дополнительные модули.

Ограничения для основных модулей

Модуль Qt Поддерживаемые функции Примечания
Qt Multimedia Аудио SoundEffect, QSound, QSoundEffect и QAudioOutput
Qt Multimedia Widgets Не поддерживается
Qt WebKit Не поддерживается
Qt WebKit Widgets Не поддерживается

Поддерживаемые дополнения

Дополнение Qt Примечания
Qt Charts Версия 2.0.1
Qt Data Visualization Версия 1.2.1
Qt Virtual Keyboard Версия 2.0
Qt Quick Compiler Версия 3.0
Qt Concurrent
Qt Graphical Effects
Qt Image Formats
Qt OpenGL Только OpenGL ES 2

Примечание: Предоставлено для облегчения переноса с Qt 4.x. Используйте классы QOpenGL в Qt GUI для нового кода

Qt Platform Headers
Qt SVG
Qt XML Patterns

Примечание: Вы можете явно исключить неподдерживаемые или неиспользуемые модули из сборки с помощью параметра -skip <module> при запуске инструмента configure.

Примечания к платформе

С выпуском Qt 5, Qt больше не содержит собственной реализации оконной системы: QWS больше не поддерживается. Для однопроцессорных случаев использования Qt Platform Abstraction — лучшее решение.

Есть два плагина платформы, которые могут быть использованы на VxWorks: EGLFS и VxWorksFB. Доступность этих плагинов зависит от конфигурации Qt. Плагин платформы по умолчанию также зависит от устройства. Например, на многих платах eglfs будет выбран по умолчанию. Если значение по умолчанию не подходит, можно использовать параметр переменной среды QT_QPA_PLATFORM для запроса другого плагина. В качестве альтернативы, для быстрых тестов, можно использовать параметр командной строки -platform с тем же синтаксисом.

Настройка для конкретного устройства

Компиляция Qt для заданного устройства требует инструментальной цепочки и sysroot. Кроме того, некоторые устройства требуют кода адаптации, специфичного для поставщика, для поддержки EGL и OpenGL ES 2.0. Это не актуально для платформ без ускорения, например, использующих плагин VxWorksFB, однако ни OpenGL, ни Qt Quick 2 не будут функциональными в такой настройке.

Директория qtbase/mkspecs/devices содержит код конфигурации и адаптации графики для ряда устройств. Например, vxworks-imx6 содержит настройки сборки, такие как оптимальные флаги компилятора и линковщика, для серии Freescale iMX6, и либо реализацию eglfs-хуков (код адаптации, специфичный для поставщика), либо ссылку на подходящий плагин интеграции устройств eglfs. Устройство выбирается с помощью параметра -device инструмента configure. Имя, которое следует после этого аргумента, должно хотя бы частично совпадать с одной из поддиректорий в devices.

Перед запуском configure и сборкой Qt 5 необходимо открыть VxWorks 7 Development Shell в командной строке.

  • Linux:
    cd <VxWorks 7 installation directory>
    ./wrenv.sh -p vxworks-7
  • Windows:
    cd <VxWorks 7 installation directory>
    wrenv -p vxworks-7

Ниже приведен пример конфигурации для BD-SL-i.MX6. Для большинства платформ VxWorks команда configure будет выглядеть очень похоже. По умолчанию Qt 5 настроен на использование динамических библиотек. Чтобы скомпилировать Qt 5 статически, добавьте параметр -static для configure.

./configure -commercial -confirm-license -device vxworks-imx6 -device-option CROSS_COMPILE=arm -prefix /sd1:1/qt5rtp -sysroot <path_to_vxworks_vsb_dir>/fsl_imx6_1_1_11_0_VSB -no-gcc-sysroot -extprefix <path_to_host_dir>/qt5rtp -hostprefix <path_to_host_dir>/qt5rtp -no-openssl -nomake tools -nomake examples

Наиболее важные параметры — -device, -device-option CROSS_COMPILE=<arch>, -sysroot и -no-gcc-sysroot. Указав -sysroot, файлы заголовков и библиотеки, используемые тестами обнаружения функций configure, а также сам Qt, будут взяты из указанного места, вместо стандартных мест на хост-компьютере. Это означает, что установка пакетов разработки на хост-машину не имеет значения. Вместо этого, заголовки и библиотеки для целевой архитектуры (например, ARM) должны присутствовать в sysroot.

Рекомендуется собирать Qt 5 с помощью shadow build. См. Параметры конфигурации Qt для получения дополнительной информации.

Сборка и установка Qt 5

make -j<N>
make install

Плагины платформы для устройств VxWorks

EGLFS

EGL — интерфейс между OpenGL и родной оконной системой. Qt может использовать EGL для управления контекстом и поверхностями, однако API не содержит платформенных особенностей: создание родного окна (которое необязательно будет реальным окном на экране) по-прежнему должно выполняться платформа-зависимым способом. Отсюда необходимость кода адаптации, специфичного для платы или графического процессора. Такие адаптации предоставляются либо как eglfs-хуки, один файл исходного кода, скомпилированный в плагин платформы, либо как динамически загружаемые плагины интеграции устройств EGL.

EGLFS — плагин платформы для запуска приложений Qt 5 поверх EGL и OpenGL ES 2.0 без реальной оконной системы (например, X11 или Wayland). Помимо приложений Qt Quick 2 и родного OpenGL, он поддерживает и рендеринг окон программным способом (например, QWidget). В последнем случае содержимое виджетов рендерится процессором в изображения, которые затем загружаются в текстуры и компонуются плагином.

Это рекомендуемый плагин для современных устройств VxWorks, которые включают графический процессор.

EGLFS заставляет первое окно верхнего уровня (будь то QWidget или QQuickView) стать полноэкранным. Это окно также выбирается в качестве корневого окна виджета, в которое компонуются все другие окна верхнего уровня (например, диалоговые окна, всплывающие меню или раскрывающиеся списки). Это необходимо, потому что с EGLFS всегда существует ровно одно родное окно и поверхность окна EGL, и они принадлежат виджету или окну, которое создается первым. Этот подход хорошо работает, когда существует главное окно, которое существует на протяжении всего срока службы приложения, а все остальные виджеты являются либо не главными, либо создаются позже, после того, как будет показано главное окно.

Существуют дополнительные ограничения для окон на основе OpenGL. Начиная с Qt 5.3, eglfs поддерживает единственное полноэкранное GL-окно (например, окно OpenGL на основе QWindow, QQuickView или QGLWidget). Открытие дополнительных окон OpenGL или смешивание таких окон с содержимым на основе QWidget не поддерживается и приведет к завершению приложения с сообщением об ошибке.

При необходимости eglfs можно настроить с помощью переменных среды:

  • QT_QPA_EGLFS_FB - Заменяет устройство буфера отображения. По умолчанию значение /dev/fb0. На большинстве встраиваемых платформ это не очень актуально, так как буфер отображения используется только для запроса настроек, таких как размеры дисплея. Однако на некоторых устройствах этот параметр позволяет указать, какой дисплей использовать в конфигурациях с несколькими дисплеями, аналогично параметру fb в VxWorksFB.
  • QT_QPA_EGLFS_WIDTH и QT_QPA_EGLFS_HEIGHT - Содержат ширину и высоту экрана в пикселях. Хотя eglfs попытается определить размеры по устройству буфера отображения /dev/fb0, это не всегда работает, и может потребоваться ручное указание размеров.
  • QT_QPA_EGLFS_PHYSICAL_WIDTH и QT_QPA_EGLFS_PHYSICAL_HEIGHT - Физическая ширина и высота экрана в миллиметрах. На платформах, где устройство буфера отображения /dev/fb0 недоступно или запрос не выполняется успешно, значения рассчитываются на основе значения DPI по умолчанию 100. Эту переменную можно использовать для переопределения таких значений по умолчанию.
  • QT_QPA_EGLFS_DEPTH - Переопределяет глубину цвета для экрана. На платформах, где устройство буфера отображения /dev/fb0 недоступно или запрос не выполняется успешно, используется значение по умолчанию 32. Эту переменную можно использовать для переопределения таких значений по умолчанию. Обратите внимание, что это влияет только на значение глубины цвета, сообщённое QScreen. Это не имеет связи с конфигурациями EGL и глубиной цвета, используемой для рендеринга OpenGL.
  • QT_QPA_EGLFS_SWAPINTERVAL - По умолчанию запрашивается интервал обмена 1. Это позволяет синхронизироваться с вертикальной частотой обновления дисплея. Значение можно переопределить с помощью этой переменной среды. Например, передача 0 отключит блокирование при обмене, что позволит работать с максимальной скоростью без синхронизации.
  • QT_QPA_EGLFS_FORCE888 - При установке этого значения размеры каналов цвета красного, зеленого и синего игнорируются при создании нового контекста, окна или внеэкранной поверхности. Вместо этого плагин запросит конфигурацию с 8 битами на канал. Это может быть полезно на устройствах, где конфигурации с менее чем 32 или 24 битами на пиксель выбираются по умолчанию, но известно, что они не подходят, например, из-за эффекта полос. Вместо изменения всех приложений, эта переменная обеспечивает более простой способ принудительно использовать конфигурации 24/32 бит/пиксель для данного устройства.
  • QT_QPA_EGLFS_DEBUG - При установке этого значения на вывод отладки выводятся некоторые отладочные сведения. Например, входной QSurfaceFormat и свойства выбранной конфигурации EGL выводятся при каждом создании нового контекста. Вместе с переменной QSG_INFO Qt Quick, это может предоставить полезную информацию для устранения неполадок, связанных с конфигурацией EGL.
  • QT_QPA_EGLFS_INTEGRATION - Помимо встроенных hooks, также возможно предоставить адаптацию, специфичную для устройства или поставщика, в виде динамически загружаемых плагинов. Эта переменная среды навязывает определённый плагин. Например, установка значения eglfs_kms будет использовать бэкенд KMS/DRM. Это возможно только в случае, если статические, встроенные hooks не были указаны в спецификациях устройства. На практике встроенные hooks редко используются, почти все бэкэнды сейчас мигрированы на плагины. В спецификациях устройства по-прежнему содержится соответствующая EGLFS_DEVICE_INTEGRATION запись: имя предпочтительного бэкенда для конкретного устройства. Это необязательно, но очень полезно, чтобы избежать необходимости установки этой переменной среды в случае наличия более одного плагина в целевой системе. В настольной среде бэкэнды KMS или X11 имеют приоритет, в зависимости от наличия переменной среды DISPLAY.

В дополнение к QT_QPA_EGLFS_DEBUG, eglfs также поддерживает более современную систему категорированного ведения журнала Qt. Доступны следующие категории ведения журнала:

  • qt.qpa.egldeviceintegration – Включает ведение журнала для динамически загружаемых бэкэндов. Очень полезно для проверки, какой бэкенд используется.
  • qt.qpa.input – Включает вывод отладки от обработчика ввода evdev. Очень полезно для проверки, было ли правильно распознано и открыто данное устройство ввода.

Поток рендеринга графа сцен Qt Quick

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

На многих платформах граф сцен даже будет рендериться в отдельном потоке рендеринга, в то время как поток GUI готовит состояние следующей кадра.

В некоторых случаях, когда приложение сложное, например, его граф сцен содержит множество элементов, граф сцен может потреблять больше памяти стека, чем доступно по умолчанию для потока рендеринга. Размер стека памяти по умолчанию составляет 64 КБ. С помощью переменной среды QSG_RENDERTHREAD_STACK_SIZE можно увеличить размер стека, доступный для потока рендеринга графа сцен.

VxWorksFB

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

Плагин vxworksfb позволяет указывать дополнительные параметры, передавая их в переменную среды QT_QPA_PLATFORM или параметр командной строки -platform. Например, QT_QPA_PLATFORM=vxworksfb:fb=/dev/fb1 указывает, что следует использовать устройство буфера отображения /dev/fb1 вместо значения по умолчанию fb0. Несколько параметров можно указать, разделив их двоеточием.

  • fb=/dev/fbN - Указывает устройства буфера отображения. В конфигурациях с несколькими дисплеями это обычно позволит запускать приложение на разных дисплеях. На данный момент нет возможности использовать несколько буферов отображения в одном приложении Qt.
  • size=<ширина>x<высота> - Указывает размер экрана в пикселях. Плагин попытается запросить размеры дисплея, как физические, так и логические, из устройства буфера отображения. Однако это может не всегда привести к правильным результатам, и поэтому может потребоваться явно указать значения.
  • mmSize=<ширина>x<высота> - Физическая ширина и высота в миллиметрах.
  • offset=<ширина>x<высота> - Смещение в пикселях, указывающее верхний левый угол экрана. По умолчанию положение находится в (0, 0).

Ввод

При отсутствии системного окна мышь, клавиатура и сенсорный ввод считываются напрямую через evdev. Обратите внимание, что для этого необходимо, чтобы узлы устройств /input/event* были доступны для чтения пользователем. eglfs и vxworksfb имеют встроенный код обработки ввода evdev.

Ввод в eglfs и vxworksfb

Параметры, такие как имя узла устройства, можно установить в переменных среды QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS и QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS. Кроме того, встроенные обработчики ввода можно отключить, установив QT_QPA_EGLFS_DISABLE_INPUT или QT_QPA_FB_DISABLE_INPUT в 1. На некоторых сенсорных экранах координаты необходимо поворачивать. Это можно включить, установив QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS в rotate=180.

Мышь

Курсор мыши будет отображаться всякий раз, когда QT_QPA_EGLFS_HIDECURSOR (для eglfs) или QT_QPA_FB_HIDECURSOR (для vxworksfb) не установлены, курсор мыши всегда будет отображаться, если явно не отключён через переменную среды.

Горячая подключаемость не поддерживается.

Клавиатура

Обработчик клавиатуры evdev поддерживает следующие дополнительные параметры:

  • /input/... - Указывает имя устройства ввода. Если не указано, Qt будет искать подходящее устройство, перебирая доступные узлы.

Если встроенная карта символов по умолчанию недостаточно, можно указать другую, либо через параметр keymap, либо используя функцию eglfs-специфичную loadKeymap(). Последний вариант позволяет переключать карту символов во время выполнения. Однако это требует использования встроенного обработчика клавиатуры eglfs; он не поддерживается, когда обработчик клавиатуры загружен через параметр командной строки -plugin.

Сенсорный ввод

Поддерживаются устройства с одно- и многоточечным вводом, для этого необходимо, чтобы VxWorks был правильно настроен для поддержки устройств сенсорного ввода.

Отладка устройств ввода

Можно вывести информацию на вывод отладки, включив правило ведения журнала qt.qpa.input, например, установив переменную среды QT_LOGGING_RULES в значение qt.qpa.input=true. Это полезно для определения используемого устройства или для устранения неполадок при обнаружении устройств.

Использование пользовательских изображений курсора мыши

eglfs поставляется со своими изображениями курсора мыши размером 32x32. Если их недостаточно, можно предоставить пользовательский атлас курсора, установив переменную среды QT_QPA_EGLFS_CURSOR в имя файла JSON. Файл также можно встроить в приложение с помощью системы ресурсов Qt.

Например, встроенный атлас курсора с 8 изображениями курсора в строке может быть указан следующим образом:

{
  "image": ":/cursor-atlas.png",
  "cursorsPerRow": 8,
  "hotSpots": [
      [7, 2],
      [12, 3],
      [12, 12],
      ...
  ]
}

Обратите внимание, что изображения должны быть плотно упакованы в атласе: ширина и высота курсоров определяются на основе общего размера изображения и настройки cursorsPerRow. Атласы должны предоставлять изображение для всех поддерживаемых курсоров.

Поток загрузчика компонентов QML

В некоторых случаях сложное приложение (например, с использованием большого количества пользовательских компонентов QML) может привести к тому, что поток загрузчика QML будет потреблять больше памяти стека, чем 32 КБ, доступных по умолчанию. С помощью переменной среды QML_LOADERTHREAD_STACK_SIZE можно увеличить размер стека, доступный для потока загрузчика QML.

Предотвращение таймаутов в QEventDispatcher

Стандартная частота системных часов (SYS_CLK_RATE) для VxWorks 7 составляет 1/60 с или ~16,67 мс. В некоторых случаях это может привести к падению частоты кадров приложения; в QEventDispatcher функция select блокируется на весь интервал системных часов из-за использования таймаута. Определив переменную среды QT_FORCE_SELECT_NOTIMEOUT=1, функция select возвращает немедленно, если новые события недоступны, а разрешение системных часов выше 10 мс, что верно для значения по умолчанию.

Запуск приложений Qt

Следующий пример демонстрирует, как запустить приложение, когда Qt 5 сконфигурирован с использованием динамических библиотек. При статически скомпилированном Qt 5 нет необходимости использовать переменную среды LD_LIBRARY_PATH. Эта переменная нужна только для указания местоположения динамических библиотек VxWorks (например, libc и OpenGL ES 2.0). Она не нужна для динамических библиотек Qt 5.

putenv "LD_LIBRARY_PATH=/sd0:1/lib"
cd "/sd0:1"
rtpSp("<Qt5_app>", 200, 0x100000, 0, 0x01000000)

Ограничения

Поддержка OpenSSL

Qt 5 не поддерживает OpenSSL для VxWorks, так как не поддерживает использование OpenSSL в режиме RTP.

Видеопамять

Системы с фиксированным объемом выделенной видеопамяти могут потребовать дополнительной настройки перед запуском приложения Qt, основанного на Qt Quick или классах, таких как QOpenGLWidget. Значение по умолчанию может быть недостаточным для таких приложений, особенно когда они отображаются на экране с высоким разрешением (например, Full HD). В этом случае они могут начать работать непредсказуемо. Поэтому рекомендуется убедиться, что доступно не менее 128 МБ видеопамяти GPU. Для систем, в которых не выделен фиксированный объем памяти для GPU, эта проблема не актуальна.

vxworksfb

Используйте параметр плагина fb для указания устройства буфера кадров для использования.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/vxworks.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API