Spec-Zone.ru › Qt 5.13

Qt для VxWorks

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

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

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

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

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

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

Qt для VxWorks предоставляется через Qt Account под названием Qt 5.5.1 > Qt VxWorks Platform Source Package.

Требования к 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 с использованием отдельной сборки. Подробности см. в разделе Параметры конфигурации 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 bpp для данного устройства.
  • QT_QPA_EGLFS_DEBUG — При установке этого параметра в вывод отладки печатается некоторая отладочная информация. Например, входной QSurfaceFormat и свойства выбранной EGL-конфигурации печатаются при создании нового контекста. В сочетании с переменной QSG_INFO Qt Quick, это может предоставить полезную информацию для устранения проблем, связанных с EGL-конфигурацией.
  • QT_QPA_EGLFS_INTEGRATION — Помимо встроенных hooks, также возможно предоставить адаптацию, специфичную для устройства или поставщика, в виде динамически загружаемых плагинов. Эта переменная окружения навязывает определенный плагин. Например, установка значения eglfs_kms будет использовать бэкэнд KMS/DRM. Это возможно только в том случае, если в описании устройства makespecs не были указаны статические, встроенные hooks. На практике встроенные hooks используются редко, почти все бэкэнды теперь мигрированы на плагины. В описании устройства makespecs по-прежнему содержится соответствующая EGLFS_DEVICE_INTEGRATION запись: имя предпочтительного бэкэнда для конкретного устройства. Это необязательно, но очень полезно, чтобы избежать необходимости устанавливать эту переменную окружения в случае наличия более одного плагина в целевой системе. В настольной среде бэкэнды KMS или X11 имеют приоритет в зависимости от наличия переменной окружения DISPLAY.

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

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

Поток рендеринга графического представления сцены Qt Quick

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

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

В некоторых случаях, когда приложение сложное, например, его графическое представление сцены содержит много элементов Item, графическое представление сцены может потреблять больше памяти стека, чем доступно по умолчанию для потока рендеринга. Размер стека по умолчанию составляет 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=<width>x<height> — Указывает размер экрана в пикселях. Плагин попытается запросить размеры дисплея, как физические, так и логические, из устройства буфера отображения. Однако это может не всегда привести к корректным результатам, и поэтому может потребоваться явно указать значения.
  • 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/qt-5.13/vxworks.html

Spec-Zone.ru

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