Spec-Zone.ru › Qt 5.15

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 5.5 больше не поддерживается.

  • Qt 5.9 LTS был проверен на VxWorks 7 SR0541.

    Примечание: Поддержка Qt 5.9 завершается в мае 2020 года.

  • 5.12 LTS проверен на VxWorks 7 SR0541. Qt 5.12 поддерживается до декабря 2021 года.

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

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

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

Примечание: Qt 5.5 больше не поддерживается.

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

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

Приложения QtWidget

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

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

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

  • Устройство графического процессора (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-окно (например, QWindow на основе OpenGL, 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.15/vxworks.html

Spec-Zone.ru

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