Spec-Zone.ru › Qt 5.11

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 modules и некоторые дополнительные модули.

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

Модуль 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 с помощью теневой сборки. Более подробная информация содержится в разделе Параметры конфигурации 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 - Переопределяет устройство framebuffer. По умолчанию /dev/fb0. На большинстве встроенных платформ это не очень актуально, так как framebuffer используется только для запроса настроек, таких как размеры дисплея. Однако на некоторых устройствах этот параметр позволяет указать, какой дисплей использовать в нескольких конфигурациях дисплеев, аналогично параметру fb в VxWorksFB.
  • QT_QPA_EGLFS_WIDTH и QT_QPA_EGLFS_HEIGHT - Содержат ширину и высоту экрана в пикселях. Хотя eglfs попытается определить размеры из устройства framebuffer /dev/fb0, это не всегда работает, и может потребоваться ручное указание размеров.
  • QT_QPA_EGLFS_PHYSICAL_WIDTH и QT_QPA_EGLFS_PHYSICAL_HEIGHT - Физическая ширина и высота экрана в миллиметрах. На платформах, где устройство framebuffer /dev/fb0 недоступно или запрос не удаётся, значения рассчитываются на основе значения DPI по умолчанию 100. Эта переменная может быть использована для переопределения таких значений по умолчанию.
  • QT_QPA_EGLFS_DEPTH - Переопределяет глубину цвета для экрана. На платформах, где устройство framebuffer /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 не были указаны в device makespecs. На практике традиционные встроенные hooks используются редко, почти все бэкэнды теперь мигрированы в плагины. В device makespecs по-прежнему содержится соответствующая 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

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

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

  • fb=/dev/fbN - Указывает устройства framebuffer. При нескольких конфигурациях дисплея это обычно позволит запускать приложение на различных дисплеях. На данный момент нет возможности использовать несколько framebuffer из одного приложения Qt.
  • size=<width>x<height> - Указывает размер экрана в пикселях. Плагин попытается запросить размеры дисплея, как физические, так и логические, из устройства framebuffer. Однако это может не всегда привести к правильным результатам, и поэтому может потребоваться явно указать значения.
  • mmSize=<width>x<height> - Физическая ширина и высота в миллиметрах.
  • offset=<width>x<height> - Смещение в пикселях, задающее верхний левый угол экрана. По умолчанию позиция находится в (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/archives/qt-5.11/vxworks.html

Spec-Zone.ru

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