Spec-Zone.ru › Qt 5.6

Qt для VxWorks

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

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

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

Qt 5 в настоящее время протестирован и поддерживается на VxWorks 7. Поскольку VxWorks 7 не имеет выпущенных версий, в настоящее время минимально необходимой версией является версия от 15 декабря 2015 года. Поддерживаемая архитектура — ARM-v7.

Пакет исходных кодов 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 /sd0:1/qt5rtp -sysroot <path_to_vxworks_vsb_dir>/fsl_imx6_1_1_6_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 не содержит информации о платформе: создание родного окна (которое необязательно будет являться фактическим окном на экране) по-прежнему должно выполняться специфичным для платформы способом. Отсюда и необходимость кода адаптации, специфичного для платы или GPU. Такие адаптации предоставляются либо в виде кроков eglfs, одного исходного файла, компилируемого в плагин платформы, либо в виде динамически загружаемых плагинов интеграции устройства EGL.

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

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

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

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

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

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

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

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

В некоторых случаях, когда приложение сложное, например, его граф сцены содержит много элементов, граф сцены может потреблять больше памяти стека, чем доступно по умолчанию для потока рендеринга. Размер стека памяти по умолчанию составляет 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.6/vxworks.html

Spec-Zone.ru

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